【问题标题】:Can import edgelist to igraph python可以将edgelist导入igraph python
【发布时间】:2015-09-11 00:25:28
【问题描述】:

我想导入到 iGraph 的文本文件中的 twitter 关注者列表。

这是我的清单示例

393795446 18215973
393795446 582203919
393795446 190709835
393795446 1093090866
393795446 157780872
393795446 1580109739
393795446 3301748909
393795446 1536791610
393795446 106170345
393795446 9409752

这就是我导入它的方式

from igraph import *
twitter_igraph = Graph.Read_Edgelist('twitter_edgelist.txt', directed=True)

但是我得到了这个错误。

---------------------------------------------------------------------------
InternalError                             Traceback (most recent call last)
<ipython-input-10-d808f2237fa8> in <module>()
----> 1 twitter_igraph = Graph.Read_Edgelist('twitter_edgelist.txt', directed=True)

InternalError: Error at type_indexededgelist.c:369: cannot add negative number of vertices, Invalid value

我不知道为什么它说的是负数。我检查了文件,它没有任何负数或 id。

【问题讨论】:

    标签: python igraph


    【解决方案1】:

    对于这种类型的文件格式,您需要使用graph.Read_Ncol。为什么你的文件不符合典型的“edgelist”格式是我无法理解的。我自己也想过很多次。我还应该提到我从here 那里得到了答案。 Tamàs 似乎是这里的主要 igraph 人。我相信他可以给出更详细的理由,说明为什么您需要使用 Ncol 而不是 Edgelist

    这对我有用。

    from igraph import *
    twitter_igraph = Graph.Read_Ncol('twitter_edgelist.txt', directed=True)
    

    个人插头

    这是 igraph 文档可以改进的一个很好的例子。

    例如:带有graph.Read_Edgelist() doc 的唯一附带文字说...

    从文件中读取边列表并基于它创建图形。请注意,顶点索引是从零开始的。

    当文件需要如何格式化时,这并不能真正告诉我任何事情。说出这个函数期望文件采用什么格式可以让很多人省心。

    【讨论】:

    • igraph 在这里给出的错误信息具有误导性;问题可能是文件中的一个数字大于 igraph 用来表示顶点 ID 的整数类型的最大值。这会导致溢出,因此 igraph “看到”一个负数作为顶点 ID,然后退出。
    • 至于Read_EdgelistRead_Ncol的区别:这是底层C库做的区别。 “边列表”是整数对的列表,其中每个整数对应于某个顶点的 ID。在 igraph 中,顶点 ID 必须在 [0, |V|-1] 范围内连续。因此,读取像张贴者那样的文件会创建许多孤立的顶点,因为文件中的顶点 ID 不是连续的。这就是我们有Read_Ncol 的原因 - 它会将文件中的原始 ID 保存在名为 name 的顶点属性中,并让顶点 ID 是连续的。
    • 另外,感谢python-igraph文档中的cmets;我知道这一点,但不幸的是,自从我离开学术界以来,我没有那么多时间致力于 igraph 的开发。回到过去,C 核心和 Python 接口紧密相连,我可以简单地假设可以查找 C 核心的更详细的文档,但现在已经不是这样了。欢迎拉取请求 - 我很乐意合并任何改进文档的拉取请求。
    • 嘿@Tamás,非常感谢您的所有回复。很高兴看到创作者如此参与用户。我认为整数溢出完全相同,但是当我将 Toy 的边缘列表减少到前 2 行时,我注意到了奇怪的行为。似乎 igraph 创建了一个由 582203919 个节点和预期的 2 条边组成的图。您的第二条评论解释了为什么会发生这种情况。我也很困惑为什么当 python 的 maxint 远高于列表中的任何整数时会出现整数溢出。看起来 C 核心实际上是在处理创建边缘列表,我敢肯定......
    • ... 使用 8 位整数并创建负整数。不幸的是,我对 C 了解不多,但我很想为这个软件包做出贡献。再次感谢您的解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 2018-03-26
    相关资源
    最近更新 更多