我尽力在网上寻找解决方案,但似乎在我的graph_tool网络中找不到解决方案。我有一个熊猫数据中心( dataframe df ),它有三个专栏:id_source,id_target,weight。id_source和id_target包含文本形式的名称。我想用它们作为顶点标签。但是,当从熊猫数据中添加边缘时,我必须设置hashed=True。然后,代码如下所示
from graph_tool.all import *
g = Graph()
eweight = g.new_ep('double')
vmap = g.add_edge_list(df.values, eprops=[eweight], hashed=True)我的目标是绘制这个带有顶点标签的小网络。当我不知道通过g.add_edge_list()函数在图中引入每个新节点的顺序时,我就无法找到如何添加顶点属性的解决方案。
我应该先添加顶点吗?然后在图上执行add_edge_list函数。第二步会识别顶点名称(或标签)吗?
发布于 2021-11-20 17:15:30
答案在vmap中。一直都在那里。当您对vmap进行索引时,它将得到标签名。
vmap[0]将是第一个顶点recorded.vmap[1]的第二个顶点的标签,等等,。
发布于 2021-11-20 17:06:12
来自Graph.add_edge_list的文档
向图中添加一个边列表,由edge_list给出,它可以是源和目标都是顶点索引的(源,目标)对的迭代器,也可以是形状的numpy.ndarray (E,2),其中E是边的数目,每一行指定一个(源,目标)对。如果列表引用图中不存在的顶点,则将创建它们。
您已经传递了df.values for edge_list,它有三列(即形状为(E,3)),但需要两列(形状为(E,2))。
试试这个:
g.add_edge_list(df[['id_source', 'id_target']].to_numpy(), eprops=[eweight], hashed=True)我怀疑eprops应该是df['weight'],但我不确定。
https://stackoverflow.com/questions/70048008
复制相似问题