为何numpy数组元素赋值后未更新?2D矩阵操作异常排查
numpy数组赋值失效的原因及解决方法
问题根源
你初始化矩阵E时指定了整数类型:
E = np.zeros((len(A),len(A)),int)
numpy的整数类型数组会自动截断所有小数赋值,只保留整数部分:
- 原代码中计算出的
-row_val/pivot是整数(如-2.0、1.0),截断后仍为有效整数,所以赋值看起来正常。 - 交换前两行后,计算出的是小数(如-0.5、0.5),被直接截断为0,导致赋值后元素没有变化。
解决方案
只需要把E的类型改为浮点型即可,有两种简单方式:
- 初始化时不指定
int,numpy会默认使用浮点型:
E = np.zeros((len(A),len(A)))
- 直接用
np.identity创建浮点型单位矩阵,更简洁:
E = np.identity(len(A))
修改后的完整代码示例
import numpy as np # 初始化交换后的A A_row1 = np.array([4,-1,5,1]) A_row2 = np.array([2,-1,4,0]) A_row3 = np.array([-2,2,-2,3]) A_row4 = np.array([0,3,-9,4]) A = np.array([A_row1,A_row2,A_row3,A_row4]) def Elem(A,row): pivot = A[row,row] # 创建浮点型单位矩阵 E = np.identity(len(A)) for i in np.arange(row+1,len(A)): row_val = A[i,row] val = -row_val/pivot print(val) E[i,row] = val print(E[i,row]) return E print(Elem(A,0))
运行这段代码后,赋值的小数会被正确保留,E矩阵会按预期更新。
内容的提问来源于stack exchange,提问作者YaBoiBukas
相关产品推荐
相关产品推荐

