Загрузить список ребер в Graph-Tool - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу загрузить список ребер в Graph-Tool.Индексы вершин в моем списке не являются последовательными, поэтому я бы хотел, чтобы они автоматически добавлялись как vertex_properties.Насколько я понимаю, это должно быть сделано с помощью add_edge_list, но я обнаружил, что vertex_property "name" не создано.С другой стороны, load_graph_from_csv работает:

from graph_tool.all import *
import numpy as np
import pandas as pd
edge_list = [[1,7,1],[7,4,5],[1,4,3]]
G = Graph(directed=False)
G.ep["length"] = G.new_edge_property("int")
eprops = [G.ep["length"]]
G.add_edge_list(edge_list, hashed=True, eprops=eprops)
print(G.vp.keys())
print(G.ep.keys())
Out: 
[]
['length']

Итак, вы видите, что в G. нет vertex_properties из документа графического инструмента для add_edge_list:

Опционально, если hashed == True, значения вершин в списке ребер не должны напрямую соответствовать индексам вершин.В этом случае они будут сопоставлены с индексами вершин в соответствии с порядком, в котором они встречаются, и будет возвращена карта свойств вершин со значениями вершин.

Теперь я обнаружил, что load_graph_from_csv работает так, как яожидается:

df = pd.DataFrame.from_records(edge_list, columns=['node_1', 'node_2', 'length'])
df.to_csv('edge_list.csv', sep=',', index=False)
G2 = load_graph_from_csv('edge_list.csv', skip_first=True, directed=False, hashed=True, eprop_names=['length'])
print(G2.vp.keys())
print(G2.ep.keys())
print([G2.vp['name'][v] for v in G2.get_vertices()])
Out: 
['name']
['length']
['1', '7', '4']

Может ли кто-нибудь указать мне правильное направление?

1 Ответ

0 голосов
/ 09 февраля 2019

Ответ прямо в документации:

"...a vertex property map with the vertex values is returned."

Обратите внимание, что написано "возвращено", а не "добавлено во внутренний список карт свойств".

Просто выполните:

name = G.add_edge_list(edge_list, hashed=True, eprops=eprops)

и name - это карта недвижимости, которую вы хотите.

...