【问题标题】:Check if two vertices are connected in iGraph检查 iGraph 中两个顶点是否连接
【发布时间】:2012-12-01 02:14:15
【问题描述】:

在 iGraph 0.6 中是否有一个非常短的表达式用于 python 2.7 来查看 index 指定的两个顶点是否通过边连接?

我在某个地方找到了:

are_connected(v1, v2)  

但在 python 中我会收到一条错误消息:“NameError: global name 'are_connected' is not defined”

上面的表达式可能是 R 或完全错误的。我不知道。 R 不足以满足我对我的项目的尝试。

我的图是无向的,并且有许多本教程中描述的顶点和边序列(vs 和 es):http://hal.elte.hu/~nepusz/development/igraph/tutorial/tutorial.html

更新: 我找到了http://packages.python.org/python-igraph/igraph.GraphBase-class.html#is_multiple is_multiple 和 is_mutual 我认为他们每个人都可以做到这一点,但我仍然得到错误:“NameError:未定义全局名称'are_mutual'”。

在互联网上,我找不到如何正确实施它的示例。我还在找。

【问题讨论】:

  • 我没听说过igraph; Python IME 的标准图形库是networkx。它有connected_components
  • 连接与邻接不同

标签: python graph igraph edges vertices


【解决方案1】:

郑重声明:are_connected(还有张贴者提到的is_mutualis_multiple)是图本身的方法,而不是单独的函数,所以正确的方法使用方法如下:

>>> g = Graph.GRG(100, 0.2)
>>> g.are_connected(0, 2)
False

【讨论】:

  • 在 igraph 0.7.1.post6 中,此函数告诉顶点是否相邻,未连接。只是说也许更合适的名字可能是 are_adjacent
【解决方案2】:

我从来没有听说过那个模块,但是,无论如何,这似乎是一个导入问题,尝试从模块中导入该函数,即:

from igraph import are_connected

否则,python 将无法识别它。 另一种可能性是该函数必须从您首先声明的图形对象中调用:

from module import MyGraphObject
...
MyGraphObject.are_connected(...)

【讨论】:

  • 我会记住 {from module import MyGraphObject ...} 解决方案,因为我肯定会在我的项目中遇到许多类似的问题,但首先我确实采用了 Andrei 的想法和这对我来说很容易。还是谢谢你!
【解决方案3】:

GraphBase 类具有函数get_eid(v1, v2, directed=True, error=True),它返回由其索引指定的顶点之间的任意边。在你这样称呼它:

g.get_eid(v1, v2, directed=False, error=False)

如果顶点断开,它将返回-1,否则返回一些边。

【讨论】:

  • @phant0m,为什么这么可怕?
  • 这非常适合我想做的事情。梅尔西·安德烈。这是我一直在寻找的解决方案。
  • @Andrei Python API 返回错误代码是不寻常的。
  • @phant0m:如果没有给出error=Falseget_eid 会按预期引发异常。 error=False 明确要求 get_eid 返回 -1 而不是引发异常。
  • @phant0m:该函数返回 -1,因为 igraph 的大部分内容是用 C 编写的,get_eid(即igraph_get_eid)后面的 C 代码返回 -1。我承认FalseNone 会更自然。
猜你喜欢
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 2018-05-14
  • 2022-07-20
  • 1970-01-01
相关资源
最近更新 更多