在 networkx 中模拟图模型
Simulate graph model in networkx
我在 networkx 中有一个非常具体的图形问题:
我的有向图有两种不同类型的节点(我将它们称为 I 和 T)并且它仅由边构建在 I-T 和 T-I 之间(因此 T 不与其他 T 连接,与 I 相同)
现在我需要模拟一个具有相同行为的新图:我有一定数量的 I 和 T,并且 I-T 之间的边以一定的概率存在(对于 T-I 也是如此,但概率不同,我们称它们为 p_i 和 p_o).
所以我的问题是我无法同时为 I 和 T 使用 for 循环进行迭代,因为两者都非常大(我现在正在分析的数据是 5000 T 和 5000 I,但可能会增加每个最多 300000 个),我的电脑无法处理。
在这种情况下创建图形的最佳方法是什么?
这是 @ravenspoint 让我在他的评论中找到的解决方案。
对于 T=5000
和 I=5000
它通过在 I
中执行 for loops
和在 T
中执行一个并通过使用 np.random.binomial(1, pi, nI)
和 np.random.binomial(1, po, nO)
来自 numpy
,其中 nO
和 nI
是实际图中 O
和 I
的长度,如果 [=32= 则创建边]这些数组是1.
如果 po=pi
(正如我的示例中发生的那样),@Stef 解决方案也有效,您可以使用 nx.bipartite.random_graph(countadd, countt, p, seed=None,directed=True)
我在 networkx 中有一个非常具体的图形问题:
我的有向图有两种不同类型的节点(我将它们称为 I 和 T)并且它仅由边构建在 I-T 和 T-I 之间(因此 T 不与其他 T 连接,与 I 相同)
现在我需要模拟一个具有相同行为的新图:我有一定数量的 I 和 T,并且 I-T 之间的边以一定的概率存在(对于 T-I 也是如此,但概率不同,我们称它们为 p_i 和 p_o).
所以我的问题是我无法同时为 I 和 T 使用 for 循环进行迭代,因为两者都非常大(我现在正在分析的数据是 5000 T 和 5000 I,但可能会增加每个最多 300000 个),我的电脑无法处理。
在这种情况下创建图形的最佳方法是什么?
这是 @ravenspoint 让我在他的评论中找到的解决方案。
对于 T=5000
和 I=5000
它通过在 I
中执行 for loops
和在 T
中执行一个并通过使用 np.random.binomial(1, pi, nI)
和 np.random.binomial(1, po, nO)
来自 numpy
,其中 nO
和 nI
是实际图中 O
和 I
的长度,如果 [=32= 则创建边]这些数组是1.
如果 po=pi
(正如我的示例中发生的那样),@Stef 解决方案也有效,您可以使用 nx.bipartite.random_graph(countadd, countt, p, seed=None,directed=True)