给定矩阵:
x = matrix([[ 0.9, 0.14], [ 0.15, 0.8]])
如何将numpy中的第一列x[:,0]转换为对角矩阵?
x[:,0]
matrix([[0.9, 0], [0, 0.15]])
vshtjzan1#
numpy.diag( x.A[ :, 0 ] )
应该这样做。matrix和array之间的区别在这里是至关重要的。你不会从numpy.diag( x[ :, 0 ] )得到相同的结果。当x是matrix时,x.A是numpy.asarray( x )的简写。同样,为了准确回答你的问题,我想我不应该忘记把答案从array转换回matrix:
matrix
array
numpy.diag( x[ :, 0 ] )
x
x.A
numpy.asarray( x )
numpy.matrix( numpy.diag( x.A[ :, 0 ] ) )
ohfgkhjo2#
有一个diagflat,它'创建一个二维数组,将展平的输入作为对角线。'它既将ravels输入,又将结果 Package 在np.matrix中(与输入数组类型匹配):
diagflat
ravels
np.matrix
In [122]: np.diagflat(x[:,0]) Out[122]: matrix([[ 0.9 , 0. ], [ 0. , 0.15]])
所以它做了jez的所有工作,只是把它 Package 成一个广义函数:
jez
np.matrix(np.diag(np.asarray(x[:,0]).ravel()))
o2g1uqev3#
你可以使用np.diag(np.diag(your numpy array))。
np.diag(np.diag(your numpy array))
>>> import numpy as np >>> b = np.arange(1,10).reshape(3,3) >>> b array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> np.diag(np.diag(b)) array([[1, 0, 0], [0, 5, 0], [0, 0, 9]])
3条答案
按热度按时间vshtjzan1#
应该这样做。
matrix
和array
之间的区别在这里是至关重要的。你不会从numpy.diag( x[ :, 0 ] )
得到相同的结果。当x
是matrix
时,x.A
是numpy.asarray( x )
的简写。同样,为了准确回答你的问题,我想我不应该忘记把答案从
array
转换回matrix
:ohfgkhjo2#
有一个
diagflat
,它'创建一个二维数组,将展平的输入作为对角线。'它既将ravels
输入,又将结果 Package 在np.matrix
中(与输入数组类型匹配):所以它做了
jez
的所有工作,只是把它 Package 成一个广义函数:o2g1uqev3#
你可以使用
np.diag(np.diag(your numpy array))
。