После долгой мысли, я, наконец, решил опубликовать этот вопрос здесь. Несколько дней назад я начал использовать graph-tool
, чтобы делать разные вещи. До этого я использовал Networkx
. Я уже видел впечатляющие performance comparision и думал, что все будет достаточно просто. Тем не менее, я сразу же столкнулся с проблемой скорости и asked a question, связанной с конкретным аспектом этого. Я получил быстрый ответ, который удовлетворил меня. Однако сейчас эта проблема с периодичностью меня толкает, и я не могу найти документацию о graph-tool
, которая связана с ее эффективным использованием. Например, из ответа на мой последний вопрос, я понял, что лучше добавить все ребра вместе, а не один за другим, что очень важно отметить, но нигде не упоминалось! У меня теперь есть еще две аналогичные проблемы:Использование графического инструмента эффективно
(1) Как выбрать случайный сосед данного узла? Я могу видеть только следующее решение:
nbr = np.random.choice(list(v.all_neighbours()))
поскольку v.all_neighbours()
является генератором, я должен преобразовать его в список, чтобы выбрать случайный элемент. Это замедляет код, но я не вижу лучшего способа.
(2) Я хочу назначить 1d-вектор (list
okay?) Каждой из вершин на графике, а затем я обмениваюсь и изменяю их определенным образом. Это просто карта свойств, и я хотел бы увидеть некоторую документацию о том, как ее эффективно использовать. Однако я ничего не могу найти.
(3) Я пытаюсь моделировать triadic closure в некоторой сети, которая сама меняет свое время. Таким образом, на каждом временном шаге мне нужна информация о соседях каждой вершины графика. Опять же, я должен создать список (или массив numpy):
nbrs = [w for w in v.neighbours()]
, который существенно снижает скорость моего кода. Это означает, что я делаю это неправильно, но я не мог найти документацию, которая бы рассказывала мне, как эффективно использовать соседей в графическом инструменте.
Каким-то образом Networkx
программы, которые я написал для одних и тех же задач, полностью превзошли графики графиков, я просто не могу их купить.
Этот список может увеличиться, и, следовательно, я был бы очень рад, если бы кто-нибудь мог указать мне на какую-либо документацию об использовании графического инструмента эффективно, кроме ответа на вышеупомянутые конкретные вопросы.
Заранее спасибо.
Придавая принятый ответ связанного вопроса быстрый взгляд, кажется, что вы можете добавлять ребра в один конец с помощью '' add_edges_from' '(https://networkx.github.io/documentation/latest/reference/generated/ networkx.Graph.add_edges_from.html), если это одно узкое место. Возможно, это не относится к делу, так как я предположил, что «networkx» там. – Divakar
Справа. Есть ли у вас какие-либо другие идеи о графическом инструменте? Networkx, вопреки моим ожиданиям, работает довольно быстро. Это просто означает, что я неправильно использую графический инструмент. – Peaceful
У меня нет никакого опыта работы с 'graph-tool', на самом деле слышал об этом в первый раз. Но если они утверждают, что они эффективны, я надеюсь, что у них будет какая-то реализация, чтобы соответствовать этой функциональности добавления всех ребер в один проход, например, в 'networkx'. Тем не менее, я сам попробовал этот модуль, выглядит интересно! – Divakar