Python中如何用for循环正确填充二维数组元素?
问题根源与解决方案
你的问题出在循环层次的逻辑错误上——你现在的四层循环中,对于矩阵的每一个位置(i,j),都完整执行了一遍k和l的全范围循环(0到2)。这意味着每个sim_matrix[i][j]会被连续赋值9次,最终只会保留k=2、l=2时计算的结果,所以整个矩阵最后全是同一个值。
修正后的循环实现
根据你期望的输出,你应该是想让矩阵的(i,j)位置对应node_list_bsc[0][i]的均值减去node_list_bsc[1][j]的均值。直接去掉多余的k和l循环,让i、j直接作为数据的索引即可:
import numpy as np sim_matrix = np.zeros((3, 3), dtype=float) for i in range(3): for j in range(3): # 用i对应node_list_bsc[0]的索引,j对应node_list_bsc[1]的索引 sim_matrix[i][j] = node_list_bsc[0][i]['bsc mean value'] - node_list_bsc[1][j]['bsc mean value']
更高效的numpy广播实现
如果想用更简洁的方式(避免嵌套循环),可以利用numpy的广播特性:
# 先从字典列表中提取均值数组 arr_group0 = np.array([node['bsc mean value'] for node in node_list_bsc[0]]) arr_group1 = np.array([node['bsc mean value'] for node in node_list_bsc[1]]) # 利用广播直接生成3x3的差值矩阵 sim_matrix = arr_group0[:, np.newaxis] - arr_group1
为什么你的伪代码没起作用?
你尝试的if sim_matrix[i][j]==0.0判断有两个问题:
- 浮点数的
==0.0判断存在精度风险,可能因为微小的计算误差导致判断失效; - 本质上还是在同一个
(i,j)下循环所有k和l,第一次赋值的是k=0,l=0的结果,但这未必是你期望的(i,j)对应的值,逻辑依然不匹配。
内容的提问来源于stack exchange,提问作者Learn4life
相关产品推荐
相关产品推荐

