scipy 在数学中如何将矩阵化为对角阵?

8qgya5xd  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(143)

给定矩阵:

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

如何将numpy中的第一列x[:,0]转换为对角矩阵?

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

vshtjzan1#

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

应该这样做。
matrixarray之间的区别在这里是至关重要的。你不会从numpy.diag( x[ :, 0 ] )得到相同的结果。当xmatrix时,x.Anumpy.asarray( x )的简写。
同样,为了准确回答你的问题,我想我不应该忘记把答案从array转换回matrix

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

ohfgkhjo2#

有一个diagflat,它'创建一个二维数组,将展平的输入作为对角线。'它既将ravels输入,又将结果 Package 在np.matrix中(与输入数组类型匹配):

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

所以它做了jez的所有工作,只是把它 Package 成一个广义函数:

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

o2g1uqev3#

你可以使用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]])

相关问题