如何在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 ] )
应该做。
matrix
和 array
之间的区别在这里至关重要。您不会仅从 numpy.diag( x[ :, 0 ] )
得到相同的结果。 x.A
是 numpy.asarray( x )
的 shorthand,而 x
是 matrix
。
所以出于同样的原因,为了准确回答你的问题,我想我不应该忘记将答案从 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()))
给定矩阵:
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 ] )
应该做。
matrix
和 array
之间的区别在这里至关重要。您不会仅从 numpy.diag( x[ :, 0 ] )
得到相同的结果。 x.A
是 numpy.asarray( x )
的 shorthand,而 x
是 matrix
。
所以出于同样的原因,为了准确回答你的问题,我想我不应该忘记将答案从 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()))