问题描述
我想创建一个具有两种类型节点的网络:所有者和共享对象。 这是一个玩具示例,假设 3 个孩子:汤姆、山姆和玛丽分享 3 个馅饼。
姓名 | 馅饼 | 分享 |
---|---|---|
汤姆 | 巧克力 | 0.5 |
汤姆 | 苹果 | 0.1 |
汤姆 | 梨 | 0.4 |
山姆 | 巧克力 | 0.3 |
山姆 | 苹果 | 0.8 |
山姆 | 梨 | 0.4 |
玛丽 | 巧克力 | 0.2 |
玛丽 | 苹果 | 0.1 |
玛丽 | 梨 | 0.2 |
我想使用 Python 中的 Network X 库来创建所需的输出:
边的大小由每个孩子拥有的馅饼份额加权。
解决方法
这称为二分网络,您可以像创建常规网络一样创建它。
import networkx as nx
G = nx.DiGraph()
G.add_node('Tom')
G.add_node('Sam')
G.add_node('Mary')
G.add_node('Chocolate')
G.add_node('Apple')
G.add_node('Pear')
G.add_edge('Tom','Chocolate',weight=0.5)
G.add_edge('Tom','Apple',weight=0.1)
...
您绘制了方向链接,所以我使用了 DiGraph
,但如果您不关心方向,那么您可以使用常规的 Graph
。它是二分的这一事实仅意味着您可以将整个网络分成两组不共享任何边的节点。