【问题标题】:Finding the inverse of an array in python在python中查找数组的逆
【发布时间】:2020-12-13 20:59:10
【问题描述】:

我用 Python 编写了一个代码来查找数组的倒数。我确信代码是正确的,但最后,数组及其逆的乘法给了我一个不同于身份的数组,如下所示(a 是数组,a*ainverse 是 a 及其逆相乘的结果) .

 a=np.array([[2,3],
                [3,2]],
            dtype=float)

 a.dot(rowequi(a))=[[ 1.00000000e+00 -2.22044605e-16]
 [-2.22044605e-16  1.00000000e+00]]

我想问题出在我为条目选择的数据类型 (dtype=float) 上,但我不知道如何解决它。有什么办法不使用float数据类型不遇到这个问题?

以下是代码:

import numpy as np

a=np.array([[2,3],
            [3,2]],
        dtype=float)


    

def rowequi(a):
    counter=[]
    n=len(a[0])
    b=np.empty((n,n+n),dtype=float)
    identity=np.empty((n,n),dtype=float)
    for i in range(n):
        for j in range(n):
            if i==j:
                identity[i,j]=1
            else:
                identity[i,j]=0
    for k in range(n):
        f=list(a[k])
        for t in range(n):
            f.append(identity[k,t])
        b[k]=np.array(f)

    for j in range(n):
        for i in range(n):
            if b[j,i]!=0:
                b[j]=(1/b[j][i])*b[j]
                counter.append((j,i))
                for t in range(n):
                    if t!=j:
                        b[t]=b[t]-b[t][i]*b[j]
                break
        
    return b

c=np.array([[-0.4, 0.6],
            [0.6, -0.4]]) 
print(c.dot(a))

【问题讨论】:

  • a*ainverse 不是矩阵叉积。为此,您应该致电numpy.cross
  • @zvone 我编辑了问题并使用了 a.dot() 方法。
  • 您正在处理浮点数。你有一些非常接近单位矩阵的东西。

标签: python numpy floating-point


【解决方案1】:

有什么办法不使用float数据类型不遇到这个问题?

是和不是。

当你取一个数组的逆时,你会产生基本上任意的分数。您的问题中的示例有 -4/10 和 6/10,它们不能用基于二进制的浮点数表示(其中每个可表示的数字都是 2 的幂乘以某个整数,例如 3•2-5 = 3/32)。它们可以用基于十进制的浮点数表示,但数组逆可以很容易地具有诸如 5/7 或 1234/9729102223 之类的值。因此,任何浮点格式都无法表示任意数组逆。

有理算术(分数)可以表示整数或其他有理数数组的逆。但它有许多缺点,例如需要支持无限大小的整数以适应出现的任何分母,并且无法表示平方根或正弦等函数的结果。 (我提到有理算术是一种可能的数学解决方案;我不熟悉哪些 Python 特性或包可以支持它。)

还有其他选项,例如符号数学软件,但对于您正在处理的问题来说,它们可能会过大,并且可能比有理算术更加繁重。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    相关资源
    最近更新 更多