Python 数值误差:奇异矩阵

Python 数值误差:奇异矩阵,python,numpy,Python,Numpy,错误Numpy error:矩阵是单数的具体意思是什么(使用linalg.solve函数时)?我在谷歌上搜索过,但找不到任何能说明何时发生此错误的信息。奇异矩阵是不可逆的矩阵。这意味着你试图求解的方程组没有唯一的解linalg.solve无法处理此问题 您可能会发现linalg.lstsq提供了一个可用的解决方案 此函数还使用numpy.linalg.lstsq反转奇异矩阵: def inv(m): a, b = m.shape if a != b: raise

错误
Numpy error:矩阵是单数的具体意思是什么(使用
linalg.solve
函数时)?我在谷歌上搜索过,但找不到任何能说明何时发生此错误的信息。

奇异矩阵是不可逆的矩阵。这意味着你试图求解的方程组没有唯一的解
linalg.solve
无法处理此问题


您可能会发现
linalg.lstsq
提供了一个可用的解决方案

此函数还使用
numpy.linalg.lstsq
反转奇异矩阵:

def inv(m):
    a, b = m.shape
    if a != b:
        raise ValueError("Only square matrices are invertible.")

    i = np.eye(a, a)
    return np.linalg.lstsq(m, i)[0]

“没有唯一的解决方案”是指它可能有多个解决方案吗?@KaliMa这就是我的意思。@MichaelJBarber有没有办法让它返回所有可能的解决方案?这就是linalg.lstsq所做的吗?@KaliMa当一个方程组是奇异的时,它要么有无穷多个解,要么一个也没有——所以不,一般来说,你无法检索所有解。Linalg.lstsq只返回其中一个解——即使没有:在这种情况下,它返回“最佳”解(在最小二乘意义上);但是,还有无数其他“最佳”解决方案。进一步阅读:@KaliMa您可以使用
尝试:。。。除了:…
块捕捉错误;要处理奇点,你必须自己想出一个解决方案…;-)或者使用
lstsq
:这不会崩溃,并且留给您至少一个解决方案…如果您有一个单数矩阵,那么它可能表明您在矩阵填充例程中有一些错误。如果你的矩阵真的是奇异的,那么你可以通过奇异值分解得到一些有用的信息。但是在这种情况下,您需要对线性代数和数值计算概念有很好的理解。