Я использую python и networkx, чтобы смоделировать, какой оратор упоминает, какой элемент в разговоре. Для этого я хочу построить двудольный график, где один набор узлов представляет колонки, а другой - элементы. Из этого графика я хочу вычислить некоторые показатели центральности, например, между центральностью. Я также хочу передать вес каждого ребра в качестве аргумента, где вес представляет, как часто говорящий упоминал какой-либо предмет. Однако двухсторонняя реализация не позволяет мне передавать вес в качестве аргумента.
В чем разница между реализациями и какую я должен использовать для моделирования моей проблемы?
import networkx as nx
from networkx.algorithms import bipartite
speakers = ['Pink', 'Green']
items = ['Knife', 'Rope']
B = nx.Graph()
B.add_nodes_from(items, bipartite = 0)
B.add_nodes_from(speakers, bipartite = 1)
B.add_edge('Pink', 'Knife', weight = 10)
B.add_edge('Pink', 'Rope', weight = 4)
B.add_edge('Green', 'Rope', weight = 2)
B.add_edge('Green', 'Knife', weight = 7)
bottom_nodes, top_nodes = bipartite.sets(B)
print(nx.is_bipartite(B))
print(bipartite.betweenness_centrality(B, bottom_nodes))
print(nx.betweenness_centrality(B))
print(nx.betweenness_centrality(B, weight = 'weight'))
Я получаю следующий вывод:
True
{'Knife': 0.25, 'Rope': 0.25, 'Pink': 0.25, 'Green': 0.25}
{'Knife': 0.16666666666666666, 'Rope': 0.16666666666666666, 'Pink': 0.16666666666666666, 'Green': 0.16666666666666666}
{'Knife': 0.0, 'Rope': 0.3333333333333333, 'Pink': 0.0, 'Green': 0.3333333333333333}
Я ожидаю, что результаты будут такими же;так в чем же разница в реализации?