Python 创建numpy矩阵的逆矩阵和对角矩阵
我正在做numpy数组的逆运算Python 创建numpy矩阵的逆矩阵和对角矩阵,python,numpy,matrix,Python,Numpy,Matrix,我正在做numpy数组的逆运算 from numpy import mat from numpy import * from numpy import matrix from numpy import linalg d =array ([ (0, 1, 2, 3, 4), ( 5, 6, 7, 8, 9), (10, 11, 12, 13, 14)]) print d.T print d.I print d.diagonal
from numpy import mat
from numpy import *
from numpy import matrix
from numpy import linalg
d =array ([ (0, 1, 2, 3, 4),
( 5, 6, 7, 8, 9),
(10, 11, 12, 13, 14)])
print d.T
print d.I
print d.diagonal
#above line gives <built-in method diagonal of numpy.ndarray object at 0x7fdf40a263f0>
print numpy.linalg.inv(d)
有没有关于求逆和对角的建议?如果您将
d
转换为np.matrix
,您将得到这些方法,方法如下:
d = np.matrix(d)
然后:
将起作用。
A.diagonal
是一种numpy.ndarray方法,正如打印输出所示。因此,@Saullo Castro的解决方案也适用于numpy阵列,而无需转换为np.matrix
import numpy as np
A = np.arange(25).reshape((5,5))
diag = A.diagonal()
# array([ 0, 6, 12, 18, 24])
Numpy数组没有计算矩阵逆的方法,但是您可以使用
Numpy.linalg.inv
轻松地进行计算,正如您已经根据代码示例进行了尝试一样。我建议更改所有这些导入:
from numpy import mat
from numpy import *
from numpy import matrix
from numpy import linalg
只有一个:
import numpy as np
那你就可以了
d = np.array(...)
# d = np.arange(15).reshape(3,5)
M = np.matrix(d)
M.I # a matrix has an I property, but an array does not
d.diagonal() # diagonal is a method, not a property
np.diagonal(d) # diagonal is also a function
np.linalg.inv(d)
不起作用-它给出了一个反对数组不是正方形的错误。很明显,M.I
返回的是一种不同的逆。请参阅我下面关于pinv
的说明
numpy
(以及一般的Python)具有函数、方法和属性(属性)。区别清楚吗
许多numpy函数最终调用主数组对象的相应方法。通常这并不重要,只是为了方便打电话
矩阵是一个子类,它有许多自己的方法。例如,请注意
In [817]: M.diagonal()
Out[817]: matrix([[ 0, 6, 12]])
In [818]: d.diagonal()
Out[818]: array([ 0, 6, 12])
diagonal
返回了相同的数字,但对于M
,它返回了同一类的对象,根据类的定义,该对象是2d
d.T
,M.I
accessproperties
。它们不需要方法所需要的()
,但在许多方面它们是相同的np.matrix
定义了I
,但np.array
没有定义
如果您习惯于在MATLAB中使用矩阵,那么np.matrix
类可以简化转换。但是如果这是您第一次使用这样的数组,我建议您使用np.array
。np.matrix
类只会增加混乱
M.I
与M.getI()
相同
它的代码是(使用help(M.getI)
阅读它的文档)
这意味着M.I
使用pinv
而不是inv
<代码>np.linalg.pinv(d)有效。您看过和吗?
d = np.array(...)
# d = np.arange(15).reshape(3,5)
M = np.matrix(d)
M.I # a matrix has an I property, but an array does not
d.diagonal() # diagonal is a method, not a property
np.diagonal(d) # diagonal is also a function
In [817]: M.diagonal()
Out[817]: matrix([[ 0, 6, 12]])
In [818]: d.diagonal()
Out[818]: array([ 0, 6, 12])
def getI(self):
M, N = self.shape
if M == N:
from numpy.dual import inv as func
else:
from numpy.dual import pinv as func
return asmatrix(func(self))