Можно ли избежать возврата ребер igraph в векторизованном виде? - PullRequest
0 голосов
/ 10 февраля 2020

Итак, я создаю свой график в основном c виде:

import igraph
import numpy as np
graph = igraph.Graph()
graph.add_vertices(np.array([0,1,2,3,4,5]))
graph.add_edges(np.array([[0,1],[1,2],[3,4],[4,5],[3,5]]))

Интересно, можно ли ускорить преобразование краев моего графика в массив numpy? Я делаю это прямо сейчас:

print(np.array([n.tuple for n in graph.es])) # prints array [[0,1],[1,2],[3,4],[4,5],[3,5]]

1 Ответ

1 голос
/ 10 февраля 2020

Самый простой и быстрый способ преобразования всех ребер в массив numpy заключается в следующем:

edges = np.array(graph.get_edgelist())

Для случайного графа с n=1000 узлами и m=5000 ребрами это выполняется в

2.74 ms ± 561 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

на моей машине. Альтернатива

edges = np.array([n.tuple for n in graph.es])

работает почти на 30% медленнее и занимает

3.53 ms ± 542 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

на моей машине.

...