1

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

幸运的是,我遇到了这篇 [文章] ( 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 个节点。我想知道如何通过从 5 到 10 的比例因子 x 来扩展此类网络。示例将非常有帮助。

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

4

1 回答 1

1

您可以使用 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')

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

于 2020-10-01T06:36:47.963 回答