给定矩阵:
x = matrix([[ 0.9, 0.14], [ 0.15, 0.8]])
如何将第一列x[:,0]
变成numpy中的对角矩阵?得到:
matrix([[0.9, 0],
[0, 0.15]])
答案 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 ] )
应该这样做。
matrix
和array
之间的区别至关重要。你只是从numpy.diag( x[ :, 0 ] )
获得了相同的结果。当x.A
为numpy.asarray( x )
时,x
是matrix
的简写。
因此,出于同样的原因,准确地回答您的问题,我想我不应该忘记将答案从array
转换回matrix
:
numpy.matrix( numpy.diag( x.A[ :, 0 ] ) )