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

时间:2015-01-25 05:14:23

标签: python numpy scipy

给定矩阵:

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

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

matrix([[0.9, 0],
        [0, 0.15]])

2 个答案:

答案 0 :(得分:3)

有一个diagflat'创建一个二维数组,其中扁平输入为对角线。'。它都是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()))

答案 1 :(得分:2)

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

应该这样做。

matrixarray之间的区别至关重要。你只是从numpy.diag( x[ :, 0 ] )获得了相同的结果。当x.Anumpy.asarray( x )时,xmatrix的简写。

因此,出于同样的原因,准确地回答您的问题,我想我不应该忘记将答案从array转换回matrix

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