This question already has answers here:
Replace diagonals of a 2D array with python [duplicate]
                                
                                    (2个答案)
                                
                        
                                在8个月前关闭。
            
                    
我想将某些numpy矩阵的对角线设置为任意一维数组。

例如,如果:

mat = np.array([[1,2],[3,4]])
diag = np.array([5,6])


然后:

>>> set_diagonal(mat, diag)
>>> mat
... array([[5,2],
           [3,6]])


我可以从diag变量创建对角矩阵,将diag_fillmat矩阵创建为0并添加结果。但是,如果我尝试更改对角线,这似乎会使用大量不必要的资源。

如何在numpy中设置矩阵的对角线?

注意:这不是this question的重复项,因为他们想将对角线设置为常数。

最佳答案

您正在寻找numpy.fill_diagonal

根据文档:


  numpy.fill_diagonal(a,val,wrap = False)。
  填充任意维度的给定数组的主对角线。


import numpy as np
mat = np.array([[1,2],[3,4]])

np.fill_diagonal(mat, [5,6])
print(mat)
#[[5 2]
# [3 6]]


要么

import numpy as np
mat = np.array([[1,2],[3,4]])
diag = np.array([5,6])
np.fill_diagonal(mat, diag)
print(mat)
#[[5 2]
# [3 6]]

关于python - 如何在numpy中更改矩阵对角线的值? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55940915/

10-12 21:54