【问题标题】:Numpy error: Singular matrixNumpy错误:奇异矩阵
【发布时间】:2012-12-10 05:47:45
【问题描述】:

错误Numpy error: Matrix is singular 的具体含义是什么(使用linalg.solve 函数时)?我在 Google 上查看过,但找不到任何可以说明此错误发生时的内容。

【问题讨论】:

  • 如果你有一个奇异矩阵,那么它可能表明你的矩阵填充程序有错误。如果您的矩阵确实是奇异的,那么您可以使用奇异值分解获得一些有用的信息。但是在这种情况下,您需要对线性代数和数值计算概念有很好的理解。

标签: python numpy


【解决方案1】:

奇异矩阵是不可逆的。这意味着您尝试求解的方程组没有唯一解; linalg.solve 无法处理。

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

【讨论】:

  • “没有唯一的解决方案”是指它可能有多个解决方案吗?
  • @KaliMa 这就是我的意思。
  • @MichaelJBarber 有没有办法让它返回所有可能的解决方案?这就是 linalg.lstsq 的作用吗?
  • @KaliMa 当方程组是奇异的时,它要么有无限多的解,要么没有——所以不,通常你不能全部检索它们。 Linalg.lstsq 只返回其中一个解决方案——即使没有:在这种情况下,它返回“最佳”解决方案(在最小二乘意义上);但是,还有无数其他“最佳”解决方案。进一步阅读:en.wikipedia.org/wiki/System_of_linear_equations
  • @KaliMa 您可以使用try: ... except: ... 块来捕获错误;要处理奇点,你必须自己想出一个解决方案...... ;-) 或者使用lstsq: 这不会崩溃,并且至少给你留下 one 解决方案.. .
【解决方案2】:

此函数还使用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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 2013-07-04
    • 1970-01-01
    • 2023-03-22
    • 2013-07-08
    • 1970-01-01
    相关资源
    最近更新 更多