生成复杂网络的方法

Methods for generating complex network

我有一个小型图网络,我一直在寻找可以使 利用小型网络的结构特性生成复杂的 网络。 我想使用一种保留度数等属性的方法 分布、聚类等

幸运的是,我遇到了这篇[文章] (https://link.springer.com/article/10.1007/s41109-017-0054-z) 那 讨论了原始网络副本的生成,然后是 网络扩展。

例如, 我生成了如下所示的边加权 Networkx 图:( 创建随机图用于说明),

import random
import networkx as nx
import matplotlib.pyplot as plt
G = nx.gnm_random_graph(20, 30, seed=1)

for (u, v) in G.edges():
    G.edges[u, v]['weight'] = random.randint(0, 10)

nx.draw(G, with_labels=True)
plt.show()
print(G.edges(data=True))

此图有 20 个节点。我想知道如何通过 比例因子 x 从 5 到 10 不等。示例将非常有用。

此外,在文档中 (https://github.com/networkit/networkit/blob/Dev/notebooks/User-Guide.ipynb) 提到支持的图形数据格式是 METIS 邻接格式。 我想知道是否必须将 networkx 图转换为 metis 图。 Networkit中是否有直接使用Networkx图的选项?

您可以使用 NetworKit 中的 nxadapter 模块将图形从 networkx 转换为 NetworKit,反之亦然。 在您的代码中,这将按如下方式工作:

import networkit as nk
import random
import networkx as nx
import matplotlib.pyplot as plt
G = nx.gnm_random_graph(20, 30, seed=1)

for (u, v) in G.edges():
    G.edges[u, v]['weight'] = random.randint(0, 10)

nx.draw(G, with_labels=True)
plt.show()
print(G.edges(data=True))

# Networkx graph to NetworKit graph
G_nk = nk.nxadapter.nx2nk(G, weightAttr='weight')

要生成复杂的网络,您还可以考虑使用图形生成器,here您可以找到一些示例。