【问题标题】:Matrices and inverse Matrices in PythonPython中的矩阵和逆矩阵
【发布时间】:2009-12-04 06:21:00
【问题描述】:

对于我正在做的一个项目,我使用 NetworkX adj_matrix() 函数将使用 NetworkX 创建的图分解为邻接矩阵。但是,我遇到的一个问题是,当我尝试找到矩阵的逆时,我分解的每个图都会给我以下错误。

str: Traceback (most recent call last):
  File "C:\eclipse\plugins\org.python.pydev.debug_1.4.7.2843\pysrc\pydevd_resolver.py", line 179, in _getPyDictionary
    attr = getattr(var, n)
  File "C:\Python26\lib\site-packages\numpy\core\defmatrix.py", line 519, in getI
    return asmatrix(func(self))
  File "C:\Python26\lib\site-packages\numpy\linalg\linalg.py", line 355, in inv
    return wrap(solve(a, identity(a.shape[0], dtype=a.dtype)))
  File "C:\Python26\lib\site-packages\numpy\linalg\linalg.py", line 254, in solve
    raise LinAlgError, 'Singular matrix'
LinAlgError: Singular matrix

我尝试从 5 个不同的图生成邻接矩阵,当我试图找到邻接矩阵的逆时,它们都产生了相同的错误。我提出的问题是是否有任何方法可以从 NetworkX 图到矩阵。从这里我最好的行动方案是什么?我意识到还有其他关于矩阵逆的问题,但我的问题是我需要图邻接矩阵这一事实。

【问题讨论】:

    标签: python matrix networkx matrix-inverse


    【解决方案1】:

    邻接矩阵是not always invertible。这个主题有papers;我不确定相应的图表是否有任何简单的特征。一种实用的方法是在您的代码中捕获 LinAlgError 异常(尝试...除...),并在邻接矩阵不可逆时发出警告(否则继续执行您的计算)。

    【讨论】:

    • 我正在做的事情需要邻接表的倒数。我试图在图中找到路径集合的总和(Katz 度量),这可以通过利用图的邻接矩阵来找到。公式如下。 Katz= ((I-xA)^-1)-I
    • 有趣。如果两点之间有无数条路径(当您的图中有循环时会发生这种情况),那么我猜您无法执行反转(结果是无限的)。也许这是您遇到的问题?例如,您可以使用非循环图尝试您的例程。
    【解决方案2】:

    我不知道 networkx 是如何产生邻接矩阵的,但绝对没有理由让它是可逆的。例如,考虑完整的图(所有节点相互连接),它的 adacency 矩阵全是 1,并且矩阵显然有 0 作为特征值(当然,只要节点数 >= 2。 ..)。或者有N个节点且没有边的图,其邻接矩阵为0...

    你想做什么?我从来不必考虑邻接矩阵的逆矩阵,但对于某些(小)x 值,我经常考虑I - x A 的逆矩阵。它的倒数是

    (I - x A) ^(-1) = I + xA + x^2 A2 + ...

    对于 x 的某些值是可逆的(事实上,我认为只要 |x|

    【讨论】:

    • 顺便说一句,您提供的公式实际上与我正在尝试做的非常相似。我试图在图中找到路径集合的总和(Katz 度量),这可以通过利用图的邻接矩阵来找到。公式如下。 Katz= ((I-xA)^-1)-I(其中 I 是逆矩阵,'x' 是一个小常数)。
    • 正如我所说,如果你的 x 足够低,它 (I-xA) 是可逆的。为确保这一点,您可以对 A 的特征值进行分类,并相应地选择 x。请注意,这与尝试反转 A 本身并不是一回事......
    【解决方案3】:

    您是否要求一种生成邻接矩阵非奇异图的方法?您生成的图具有没有逆矩阵的邻接矩阵,这不是 networkx 或 numpy 的错。

    【讨论】:

    • 我正在使用 Networkx 标准 Graph() 对象,然后我慢慢开始使用 add_edges() 和 add_node() 向它添加节点。顺便说一句,很棒的头像。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多