【发布时间】:2023-03-08 04:48:01
【问题描述】:
我对 Python 和 NetworkX 比较陌生。我需要创建一个类似于Edgelist=[(0,1),(0,3),(1,0),(1,2),(1,4),(2,1),(2,5)] 的列表,其中的元素表示边缘的开始和结束节点(链接),而边缘又是网络的一部分。
我希望 Python 通过从指定的值范围(即0, 999)中随机选择整数值 (start,end) 来创建您在列表中看到的对,而不是手动设置它们,这些值代表节点 ID .然后,我想确保每个节点 ID 在一系列 (start,end) 值中至少包含一次(这意味着我的所有节点都将连接到至少一个其他节点) .
我知道我可以使用random.randint(0, 999),但我不知道如何将它“嵌套”到列表的创建中(也许是 for 循环?)。我希望我有一些代码可以给你看,但这是我第一次尝试使用 NetworkX!
编辑
为了让您直观地了解我的意思,这里有两张图片。第一个是常规网络(又名 lattice),第二个是随机网络。第一个的边缘列表是手动创建的,以便重现一个国际象棋桌,而第二个显示一个边缘列表,它是第一个的(手动)洗牌对应物。 如您所见,节点保存在完全相同的位置。希望这会有所帮助。谢谢!
【问题讨论】:
-
Networkx 有许多用于生成随机网络的算法。使用其中一种可能比您描述的方法更好,特别是因为有许多非常不同种类的随机图具有您所描述的属性。您能告诉我们更多关于您想要的属性的信息吗适合您的网络?
-
感谢乔尔的提问。我已经建立了一个格子(例如,一个长度分布是恒定值的常规网络 - 所有节点彼此等距)。现在我想通过简单地保持每个节点的坐标并随机选择要连接的节点对来从同一组节点中构建一个随机网络。我知道许多算法,但据我所知,它们似乎都不适合我的需求。
-
什么度数分布?配置模型似乎是最有可能的选择。 nx.configuration_model([1]*1000) 会得到你所说的你需要的东西,但它可能没有你想要的所有属性。
-
我认为我在理解您的问题时遇到的挑战是不清楚您想要什么输出。假设 start = 0 end = 2。你能给出一个示例 full 输出吗?我感兴趣的是:有多少“边”?是否允许重复边缘?
-
顺便说一下,在格子和随机图之间进行插值的常用算法是从格子开始,然后选择随机边对
(u,v)和(w,x)。然后删除它们并创建新边(u,x)和(w,v)(在检查这些边不存在并且 u!=x, w!=v 之后)。
标签: python list random neural-network networkx