【问题标题】:Graph-tool: How do you access the vertex value property map returned by add_edge_list?Graph-tool:如何访问 add_edge_list 返回的顶点值属性映射?
【发布时间】:2019-08-20 16:26:02
【问题描述】:

我正在尝试开始使用图形工具来进行我公司的分析,作为 networkx 的更高性能替代品。 我已经设法弄清楚了很多事情(绘图、获取中心点、度数等),但有一件事我无法弄清楚。如何访问通过 add_edge_list 加载的原始顶点值?我需要这种能力才能按值查找特定顶点,例如找到它的连接组件或其他结构。

根据the documentation for add_edge_list

可选地,如果 hashed == True,则不假定边列表中的顶点值直接对应于顶点索引。在这种情况下,它们将根据遇到的顺序映射到顶点索引,并返回具有顶点值的顶点属性映射。

我的目标是将 CSV 加载到 pandas 数据框中,对数据框执行一些操作以使其成为边缘列表格式,然后将其加载到图表中。 到目前为止,这是我的代码:

import graph_tool as gt
import pandas as pd
df = pd.read_csv('data/2019-data.csv')
G = gt.Graph(directed=False)
props = G.add_edge_list(df[['vertex1', 'vertex2']].values, hashed=True)

这可以很好地填充图表,但 props 返回空。

len(G.get_vertices())
  183298

len(props.a)
  Traceback (most recent call last):
    File "<input>", line 1, in <module>
  TypeError: object of type 'NoneType' has no len()

有人知道这是如何工作的吗?

我在图形工具 2.29 上的 Python 3.7 虚拟环境中运行它。

注意:有一个类似的问题here,但接受的答案对我不起作用。

谢谢!

【问题讨论】:

    标签: python graph-tool


    【解决方案1】:

    解决了!根据this question,您可以像列表一样通过顶点 id 索引 prop 变量,甚至可以创建映射字典以进行快速查找。

    例如

    mapping_dict = {props[i]: i for i in range(G.num_vertices())}

    虽然我不完全明白为什么props.a 不返回任何东西,因为它是一个 VertexPropertyMap...

    【讨论】:

    • 刚刚在搜索中偶然发现了这个,也许它可以帮助其他觅食者:如果props 是非标量类型,即任何vector&lt;&gt;string,或对象类型,@987654328 @ 以及任何便利访问器(例如 props.a)将返回 None。按照the docs,使用props.get_2d_array()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2020-07-17
    • 1970-01-01
    相关资源
    最近更新 更多