gpt4 book ai didi

python - 如何在 Metis for Python 中构建图表

转载 作者:行者123 更新时间:2023-11-30 23:19:28 27 4
gpt4 key购买 nike

我正在使用 Metis for Python,它是 Metis(图形分区软件)的 Python 包装器。我已经安装了所有东西,并且似乎工作正常,但是我不明白如何构建要输入的图表。

有一个在线示例:http://metis.readthedocs.org/en/latest/#example

>>> import networkx as nx
>>> import metis
>>> G = metis.example_networkx()
>>> (edgecuts, parts) = metis.part_graph(G, 3)
>>> colors = ['red','blue','green']
>>> for i, p in enumerate(parts):
... G.node[i]['color'] = colors[p]
...
>>> nx.write_dot(G, 'example.dot') # Requires pydot or pygraphviz

我运行了这个例子,它运行得很好。然而,在这个例子中,他们从未指定如何构建图“example_networkx()”。我尝试通过 networkx 构建图表:http://metis.readthedocs.org/en/latest/#metis.networkx_to_metis

我的代码是:

>>> A=nx.Graph()
>>> A.add_edges_from([(3,1),(2,3),(1,2),(3,4),(4,5),(5,6),(5,7),(7,6),(4,10),(10,8),(10,9),(8,9)])
>>> G = metis.networkx_to_metis(A)
>>> (edgecuts, parts) = metis.part_graph(G, 3)

我在最后一行收到错误。该错误可追溯到 Metis 内置代码中的这些行:

in part_graph(graph, nparts, tpwgts, ubvec, recursive, **opts)
graph = adjlist_to_metis(graph, nodew, nodesz)
in adjlist_to_metis(adjlist, nodew, nodesz)
m2 = sum(map(len, adjlist))
TypeError: object of type 'c_long' has no len()

我还尝试通过邻接表构建图:http://metis.readthedocs.org/en/latest/#metis.adjlist_to_metis但这会产生与以前相同的错误。

我想知道是否有人遇到过这个问题,或者知道我做错了什么。

我在 Centos 6.5 上使用 python 2.7

最佳答案

metis.part_graph 接受图的网络表示和邻接表表示。当你构建一个networkx图时你几乎是对的。但是,您应该直接将此图传递给part_graph函数,而不是首先将其转换为metis对象,因为part_graph函数不直接接受metis类型图。给定 numpy 中的邻接矩阵 A,示例如下:

# since weights should all be integers
G = networkx.from_numpy_matrix(np.int32(A))
# otherwise metis will not recognize you have a weighted graph
G.graph['edge_weight_attr']='weight'
[cost, parts] = metis.part_graph(G, nparts=30, recursive=True)

关于python - 如何在 Metis for Python 中构建图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26060423/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com