python 矩阵对角线上行的负总和有效
python negative sum of rows on matrix diagonal efficiently
我需要对矩阵的行求和,取反,然后将它们放在原始矩阵或非对角线项为零的矩阵的对角线上。有效的是
Mat2 = numpy.diag(numpy.negative(numpy.squeeze(numpy.asarray(numpy.sum(Mat1,axis=1))))
有没有 cleaner/faster 方法来做到这一点?我正在尝试优化一些代码。
我认为 np.diag(-Mat1.A.sum(1))
会产生相同的结果:
>>> Mat1 = np.matrix(np.random.rand(3,3))
>>> Mat1
matrix([[ 0.35702661, 0.0191392 , 0.34793743],
[ 0.9052968 , 0.16182118, 0.2239716 ],
[ 0.57865916, 0.77934846, 0.60984091]])
>>> Mat2 = np.diag(np.negative(np.squeeze(np.asarray(np.sum(Mat1,axis=1)))))
>>> Mat2
array([[-0.72410324, 0. , 0. ],
[ 0. , -1.29108958, 0. ],
[ 0. , 0. , -1.96784852]])
>>> np.diag(-Mat1.A.sum(1))
array([[-0.72410324, 0. , 0. ],
[ 0. , -1.29108958, 0. ],
[ 0. , 0. , -1.96784852]])
请注意,矩阵在 numpy 中有点令人头疼——数组通常更方便——它们唯一的句法优势,即更简单的乘法,现在已经不再重要 @
用于现代矩阵乘法 Python.
如果 Mat1
是一个数组而不是矩阵,那么您就不需要 .A
了。
我需要对矩阵的行求和,取反,然后将它们放在原始矩阵或非对角线项为零的矩阵的对角线上。有效的是
Mat2 = numpy.diag(numpy.negative(numpy.squeeze(numpy.asarray(numpy.sum(Mat1,axis=1))))
有没有 cleaner/faster 方法来做到这一点?我正在尝试优化一些代码。
我认为 np.diag(-Mat1.A.sum(1))
会产生相同的结果:
>>> Mat1 = np.matrix(np.random.rand(3,3))
>>> Mat1
matrix([[ 0.35702661, 0.0191392 , 0.34793743],
[ 0.9052968 , 0.16182118, 0.2239716 ],
[ 0.57865916, 0.77934846, 0.60984091]])
>>> Mat2 = np.diag(np.negative(np.squeeze(np.asarray(np.sum(Mat1,axis=1)))))
>>> Mat2
array([[-0.72410324, 0. , 0. ],
[ 0. , -1.29108958, 0. ],
[ 0. , 0. , -1.96784852]])
>>> np.diag(-Mat1.A.sum(1))
array([[-0.72410324, 0. , 0. ],
[ 0. , -1.29108958, 0. ],
[ 0. , 0. , -1.96784852]])
请注意,矩阵在 numpy 中有点令人头疼——数组通常更方便——它们唯一的句法优势,即更简单的乘法,现在已经不再重要 @
用于现代矩阵乘法 Python.
如果 Mat1
是一个数组而不是矩阵,那么您就不需要 .A
了。