python – 基本Numpy数组值赋值
发布时间:2020-12-16 21:42:07 所属栏目:Python 来源:网络整理
导读:作为一个小练习,我开始在 python中使用数字代码,我正在尝试制作LDLT算法.只是为了“弄湿脚”. 但是我似乎缺乏对numpy数组的基本理解.请参阅以下示例: def ldlt(Matrix): import numpy (NRow,NCol) = Matrix.shape for col in range(NCol): Tmp = 1/Matrix[c
作为一个小练习,我开始在
python中使用数字代码,我正在尝试制作LDLT算法.只是为了“弄湿脚”.
但是我似乎缺乏对numpy数组的基本理解.请参阅以下示例: def ldlt(Matrix): import numpy (NRow,NCol) = Matrix.shape for col in range(NCol): Tmp = 1/Matrix[col,col] for D in range(col+1,NCol): Matrix[col,D] = Matrix[D,col]*Tmp if __name__ == '__main__': import numpy A = numpy.array([[2,-1,0],[-1,2,-1],[0,2]]) ldlt(A) 这个例子不是我正在处理的完整代码.但是,尝试运行它,并在Matrix [col,D] = …设置断点. 我对第一次评估的期望是第0行第1列(起始值-1)被设置为等于= -1 *(1/2)= -0.5. 但是在运行代码时,它似乎设置为0.为什么? 在此先感谢所有帮助我的人. 编辑1: Python Ver.:3.3 解决方法
以下内容可能显示正在发生的事情:
>>> A = np.array([[2,2]]) >>> A.dtype dtype('int32') >>> A[0,1] -1 >>> A[0,1] * 0.5 -0.5 >>> A[0,1] *= 0.5 >>> A[0,1] 0 >>> int(-0.5) 0 您的数组只能保存32位整数,因此您尝试分配给它的任何浮点值都将被转换为int32. 以同样的价格,这是一个更加努力的方式来做你所追求的:通常要避免for循环,因为它们打败了numpy的整个目的: def ldlt_np(arr) : rows,cols = arr.shape tmp = 1 / np.diag(arr) # this is a float array mask = np.tril_indices(cols) ret = arr * tmp[:,None] # this will also be a float array ret[mask] = arr[mask] return ret >>> A = np.array([[2,2]]) >>> ldlt_np(A) array([[ 2.,-0.5,0. ],[-1.,2.,-0.5],[ 0.,-1.,2. ]]) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |