You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正代码实现用列表从左到右填充对角线全零的二维数组?

问题

我有一个列表:

idmatrixlist=[0.61, 0.63, 0.54, 0.82, 0.58, 0.57]

需要从左到右填充一个二维数组,同时保持对角线元素全为零。

我尝试了以下代码,但得到的元素顺序不符合要求:

import numpy as np

lowertriangleidmatrix = np.zeros((4,4))
indexer = np.tril_indices(4,k=-1)
lowertriangleidmatrix[indexer] = idmatrixlist
print(lowertriangleidmatrix)

运行结果:

[[0.   0.   0.   0.  ]
 [0.61 0.   0.   0.  ]
 [0.63 0.54 0.   0.  ]
 [0.82 0.58 0.57 0.  ]]

请问如何调整代码以得到正确的元素顺序?


解决方案

你需要填充的是上三角区域(不含对角线)且按行优先顺序,当前代码使用tril_indices操作的是下三角区域,所以元素顺序不符合预期。以下是两种针对性调整方案:

方案1:使用上三角索引匹配“从左到右”填充

直接替换为triu_indices(4, k=1),它会返回上三角区域(对角线以上、不含对角线)的行、列索引,且按行优先顺序排列,完全匹配“从左到右”的填充需求:

import numpy as np

idmatrixlist = [0.61, 0.63, 0.54, 0.82, 0.58, 0.57]
target_matrix = np.zeros((4,4))
# 使用上三角索引,k=1表示跳过对角线
indexer = np.triu_indices(4, k=1)
target_matrix[indexer] = idmatrixlist
print(target_matrix)

运行结果:

[[0.   0.61 0.63 0.54]
 [0.   0.   0.82 0.58]
 [0.   0.   0.   0.57]
 [0.   0.   0.   0.  ]]

方案2:若需下三角区域但调整填充顺序

如果实际需求是填充下三角区域,但要改变当前的列优先顺序,可以通过反转列表元素的方式调整:

import numpy as np

idmatrixlist = [0.61, 0.63, 0.54, 0.82, 0.58, 0.57]
target_matrix = np.zeros((4,4))
indexer = np.tril_indices(4, k=-1)
# 反转列表后赋值,改变下三角的填充顺序
target_matrix[indexer] = idmatrixlist[::-1]
print(target_matrix)

运行结果:

[[0.   0.   0.   0.  ]
 [0.57 0.   0.   0.  ]
 [0.58 0.82 0.   0.  ]
 [0.54 0.63 0.61 0.  ]]

根据你描述的“从左到右填充”,方案1应该是符合预期的最终解决方案。


内容的提问来源于stack exchange,提问作者Jamie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:15:36