Python将列表元素相加赋值给矩阵结果异常如何修正
问题原因
你原代码的四层嵌套循环逻辑存在错误:每次遍历到一组b和c的值时,内层的i、j循环会把整个矩阵的所有元素统一覆盖为当前的b+c。当循环执行到最后一组b=20、c=20时,矩阵所有位置都会被赋值为40,因此输出全为40的结果。
修正方案
方案1:调整循环逻辑,保留原生列表实现
删除冗余的两层值遍历循环,仅保留索引遍历直接对应矩阵位置赋值即可:
import numpy as np # 注意:bin是Python内置函数名,建议更换变量名避免冲突 bin_list = [10, 20] cost = [10, 20] # 创建2x2结果矩阵 res_mat = [[0.0 for i in range(len(bin_list))] for j in range(len(cost))] for i in range(len(bin_list)): for j in range(len(cost)): res_mat[i][j] = bin_list[i] + cost[j] print(np.array(res_mat))
运行后输出结果:
[[20. 30.] [30. 40.]]
方案2:利用numpy广播简化代码
已引入numpy的场景下无需手动写循环,通过广播特性可直接生成目标矩阵:
import numpy as np bin_arr = np.array([10, 20]) cost_arr = np.array([10, 20]) res_mat = bin_arr.reshape(-1, 1) + cost_arr print(res_mat)
内容的提问来源于stack exchange,提问作者user3046211
相关产品推荐
相关产品推荐

