在networkx中模拟图模型

Posted

技术标签:

【中文标题】在networkx中模拟图模型【英文标题】:Simulate graph model in networkx 【发布时间】:2021-12-01 03:02:51 【问题描述】:

我在 networkx 中有一个非常具体的图形问题:

我的有向图有两种不同类型的节点(我将它们称为 IT),并且仅在 IT 之间使用边构建> 和 TI(所以 T 不与其他 T 连接,与 I 相同)

现在我需要模拟一个具有相同行为的新图:我有一定数量的 I 和 T 并且 IT 之间的边以一定的概率存在(也适用于 TI,但概率不同,我们称它们为 p_ip_o)。

所以我的问题是我不能用 for 循环来迭代 I 和 T 因为两者都很大(我现在正在分析的数据是 5000 T 和 5000 I 但可能会增加到每个 300000),而我的电脑无法处理。

在这种情况下创建图表的最佳方法是什么?

【问题讨论】:

你能澄清一下边缘存在的概率吗? 通过查看第一个图(即真实图)的数据,我获得了边在可能数量上的比例。我使用这个比例作为模拟图的概率。不知道这样是否更清楚 “相当大”有多大?请给一个号码。此外,您的图称为 二分图。我建议尝试networkx.org/documentation/networkx-1.9/reference/generated/… “所以我的问题是我无法使用 for 循环进行迭代……因为两者都很大,我的电脑无法处理。”这很奇怪,似乎是你真正的问题。当你尝试时究竟会发生什么? (我经常使用迭代超过一百万个节点的图的代码) Networkx 与其他图形库相比速度较慢,而且您的问题似乎与性能有关 - 您是否考虑过例如网络吗?参见例如这个基准timlrx.com/blog/benchmark-of-popular-graph-network-packages-v2 【参考方案1】:

这是@ravenspoint 通过他的评论让我达到的解决方案。

对于T=5000I=5000,它通过在I 中执行for loops 和在T 中执行一个以及使用numpy 中的np.random.binomial(1, pi, nI)np.random.binomial(1, po, nO) 来工作,其中nO 和@987654 @ 是实际图中OI 的长度,如果这些数组为1,则创建边。

如果po=pi(在我的示例中发生)也可以使用@Stef 解决方案,您可以使用nx.bipartite.random_graph(countadd, countt, p, seed=None,directed=True)

【讨论】:

以上是关于在networkx中模拟图模型的主要内容,如果未能解决你的问题,请参考以下文章

Python数模笔记-NetworkX图的操作

小世界网络模型简介及R模拟

项目前期——用例图类图活动图组件图

在边界框中绘制 networkx 图

概率图模型(推理:消息传递算法)

概率图模型(推理:消息传递算法)