如何在numpy中将矩阵变成对角矩阵?

how to make matrix into diagonal matrix in numpy?

给定矩阵:

x = matrix([[ 0.9,  0.14], [ 0.15,  0.8]])

如何将第一列 x[:,0] 变成 numpy 中的对角矩阵?获得:

matrix([[0.9, 0],
        [0, 0.15]])
numpy.diag( x.A[ :, 0 ] )

应该做。

matrixarray 之间的区别在这里至关重要。您不会仅从 numpy.diag( x[ :, 0 ] ) 得到相同的结果。 x.Anumpy.asarray( x ) 的 shorthand,而 xmatrix

所以出于同样的原因,为了准确回答你的问题,我想我不应该忘记将答案从 array 转换回 matrix:

numpy.matrix( numpy.diag( x.A[ :, 0 ] ) )

有一个diagflat那个'Create a two-dimensional array with the flattened input as a diagonal.'。它既 ravels 输入,又将结果包装在 np.matrix 中(匹配输入数组类型):

In [122]: np.diagflat(x[:,0])
Out[122]: 
matrix([[ 0.9 ,  0.  ],
        [ 0.  ,  0.15]])

所以它完成了 jez 答案的所有工作,只是将其包装在一个通用函数中:

np.matrix(np.diag(np.asarray(x[:,0]).ravel()))