加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Scipy inv(A)vs A.I

发布时间:2020-12-20 11:24:44 所属栏目:Python 来源:网络整理
导读:我对 Python很新,我想知道它们之间有什么区别: inv(A) 和 A.I 两者都返回包含矩阵A的逆的Numpy数组. A.我认为它正在访问矩阵类中的变量,该矩阵类存储矩阵的逆矩阵;然而,这意味着每次A改变时,必须重新计算A的倒数(这对我来说似乎不合逻辑). 解决方法 A.I和nu
我对 Python很新,我想知道它们之间有什么区别:

inv(A)

A.I

两者都返回包含矩阵A的逆的Numpy数组.

A.我认为它正在访问矩阵类中的变量,该矩阵类存储矩阵的逆矩阵;然而,这意味着每次A改变时,必须重新计算A的倒数(这对我来说似乎不合逻辑).

解决方法

A.I和numpy.linalg.inv不一样.

A.I是property,拨打matrix.getI:

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))

因此getI要么根据矩阵的形状调用numpy.dual.inv(方形矩阵的乘法逆)或numpy.dual.pinv(Moore-Penrose伪逆).

如果你追踪定义(在dual.py),你会发现
numpy.dual.inv是numpy.linalg.inv,numpy.dual.pinv是numpy.linalg.pinv.

In [69]: s = np.random.random((3,4))

In [70]: t = np.matrix(s)

In [71]: t.I
Out[71]: 
matrix([[ 1.09509751,-0.56685735,0.51704085],[-1.59777153,0.2777383,1.25579378],[ 0.81899054,0.7594223,-0.82760378],[ 0.02845906,0.50418885,-0.2091376 ]])

In [72]: np.linalg.inv(t)
...
LinAlgError: Array must be square

此外,np.linalg.inv可以应用于numpy数组(并返回一个numpy数组),也可以应用于numpy矩阵. matrix.I属性特定于numpy矩阵,并返回另一个numpy矩阵.

In [60]: x = np.random.random((3,3))

In [62]: y = np.matrix(x)    

In [64]: type(y.I)
Out[64]: <class 'numpy.matrixlib.defmatrix.matrix'>

In [65]: type(np.linalg.inv(x))
Out[65]: <type 'numpy.ndarray'>

像A.I这样的属性在语法上看起来像一个属性,但它实际上调用了一个函数(在本例中为A.getI).因此,不存储逆的值.每次Python计算A.I时,都会调用函数A.getI(),并返回函数的结果.

有关属性的更多信息,请参见Properties: attributes managed by get/set methods.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读