为 Python 或 R 中的给定度序列生成图
Generating graphs for given degree sequence in Python or R
我正在尝试了解 Python 或 R 中是否存在与图论相关的模块功能,这些功能使人们能够从度分布开始(或表示为序列,一旦我们设置顶点数),并生成满足规定度序列的(随机)图。
例如,我们可能会得到以下分布:p=(0.179,0.49,0.34)
分别是度值 1,2
和 3
的概率。所以我们可以设置顶点数,n=500,
映射p
到一个度数序列deseq
列表:用0.179*n
次1,
填充等等休息。
任何指向之前讨论过的此类问题案例或库建议的指针都会非常有帮助。
我不知道您已经对这个主题进行了多少研究,但是 Python 中的 R 和模块中有一个非常著名的包,名为 igraph。它可能有你想要的。
在学习了如何在 R 中使用 igraph 和 Python 生成所需类型的图形后,我尝试回答自己的问题。
In R:
为了这个例子的目的,让我们假设以下度数序列:总节点数 n=20,
5,10
和 5
度数 1,2,
和 [=17= 的节点数] 分别。我们使用 c()
和 rep().
创建度数序列然后我们将使用 igraph
中的 sample_degseq()
生成对应于上述度数序列的图形。然后我们将绘制其度数直方图以进行完整性检查。
首先在 R 控制台中安装并调用 igraph 模块,使用:
install.packages("igraph")
library(igraph)
现在我们可以按照描述进行:
degreels <- c(rep(1,5),rep(2,10),rep(3,5))
graph <- sample_degseq(degreels, method="simple")
degreehist <- hist(degree(graph))
is.connected(graph)
In Python:
现在让我们对 Python 中的 igraph 模块执行完全相同的操作:
import igraph as ig
import matplotlib.pyplot as plt
degcounts = [5,10,5]
degreels = []
for i in range(len(degcounts)):
degreels += degcounts[i]*[i+1]
graph = ig.GraphBase.Degree_Sequence(degreels,method="simple")
plt.hist(graph.degree())
plt.show()
和得到的直方图:
对于 Python,networkx 软件包也提供了您要查找的内容。
特别是,functionalities regarding random graphs from degree sequences(例如 configuration_model
的想法来自@Alex_6 的评论)可能会有所帮助。
我正在尝试了解 Python 或 R 中是否存在与图论相关的模块功能,这些功能使人们能够从度分布开始(或表示为序列,一旦我们设置顶点数),并生成满足规定度序列的(随机)图。
例如,我们可能会得到以下分布:p=(0.179,0.49,0.34)
分别是度值 1,2
和 3
的概率。所以我们可以设置顶点数,n=500,
映射p
到一个度数序列deseq
列表:用0.179*n
次1,
填充等等休息。
任何指向之前讨论过的此类问题案例或库建议的指针都会非常有帮助。
我不知道您已经对这个主题进行了多少研究,但是 Python 中的 R 和模块中有一个非常著名的包,名为 igraph。它可能有你想要的。
在学习了如何在 R 中使用 igraph 和 Python 生成所需类型的图形后,我尝试回答自己的问题。
In R:
为了这个例子的目的,让我们假设以下度数序列:总节点数 n=20,
5,10
和 5
度数 1,2,
和 [=17= 的节点数] 分别。我们使用 c()
和 rep().
创建度数序列然后我们将使用 igraph
中的 sample_degseq()
生成对应于上述度数序列的图形。然后我们将绘制其度数直方图以进行完整性检查。
首先在 R 控制台中安装并调用 igraph 模块,使用:
install.packages("igraph")
library(igraph)
现在我们可以按照描述进行:
degreels <- c(rep(1,5),rep(2,10),rep(3,5))
graph <- sample_degseq(degreels, method="simple")
degreehist <- hist(degree(graph))
is.connected(graph)
In Python:
现在让我们对 Python 中的 igraph 模块执行完全相同的操作:
import igraph as ig
import matplotlib.pyplot as plt
degcounts = [5,10,5]
degreels = []
for i in range(len(degcounts)):
degreels += degcounts[i]*[i+1]
graph = ig.GraphBase.Degree_Sequence(degreels,method="simple")
plt.hist(graph.degree())
plt.show()
和得到的直方图:
对于 Python,networkx 软件包也提供了您要查找的内容。
特别是,functionalities regarding random graphs from degree sequences(例如 configuration_model
的想法来自@Alex_6 的评论)可能会有所帮助。