如何仅输入单个列表完成NumPy对称矩阵上三角元素填充
单次输入列表构造倒数对称矩阵实现方案
完全可以实现,核心逻辑是先匹配上三角元素总数与输入列表长度,按行优先填充上三角后同步生成对称的下三角倒数即可。
实现逻辑
- n阶矩阵中,对角线固定为1,需要填充的严格上三角(满足i<j的位置)总元素数为
n*(n-1)//2,仅需保证单次输入的列表长度和该数值匹配即可 - 按行优先顺序遍历所有上三角坐标,依次填入列表元素
- 同步将对称的下三角位置赋值为对应上三角元素的倒数
可直接运行的代码
import numpy as np n = int(input()) # 单次输入所有上三角元素,空格分隔 entries = list(map(float, input().split())) matrix = np.ones((n, n)) elem_idx = 0 for i in range(n): for j in range(i + 1, n): matrix[i, j] = entries[elem_idx] matrix[j, i] = 1 / entries[elem_idx] elem_idx += 1 print(matrix)
示例测试
输入参数和你给出的示例一致:
- n = 3
- 输入列表:
2 3 4
运行后输出和预期完全匹配:
[[1. 2. 3. ] [0.5 1. 4. ] [0.33333333 0.25 1. ]]
注意事项
- 输入列表长度必须严格等于
n*(n-1)//2,比如n=4时需要输入6个元素,否则会触发索引越界 - 输入的元素不能为0,否则计算倒数时会出现除零错误
内容的提问来源于stack exchange,提问作者manacoder
相关产品推荐
相关产品推荐

