python环境下使用METIS
date
Apr 24, 2025
slug
pythoninstallmetis
status
Published
tags
图分割
summary
type
Post
配置
关于METIS有两个库 - PyMetis & metis
按照PYPI里的说法,pymetis中包含了METIS,而metis只是个wrapper 需要自己单独给METIS配环境变量。
所以肯定是用pymetis啦, 而且我pip装不了metis..说是找不到这个库了... 可能用pymetis替代了吧
既然是图割,顺便再装networkx库吧。
使用METIS
part_graph(nparts, adjacency=None, xadj=None, adjncy=None, vweights=None, eweights=None, recursive=None)
这个函数就是用来分割图的,假设有n个点,编号从0~(n-1)
nparts:聚类数
传入adjancy matrix的方法
(1)无权重图
以下图为例

用list即可,共n行,每行是与i点相连的点编号,如
(2)带权重图
以下图为例 蓝色数字为边权重

参数为三个一维list - adjncy. xadj. eweights
adjncy: 表示与每个节点相连的节点编号 [1,2 , 0,3 , 0,3 , 1,2]
xadj:表示adjncy的每个节点开始与结束位置(结束位置不包含) [0,2,4,6,8] . 这样就表示0~2为节点0相连的节点,2~4为节点1相连的节点...
eweights: 与adjncy一一对应表示边权重,必须是整数。 [1,5,1,5,5,1,5,1]
则代码为
返回值为(cutcount, part_vert)
cutcount为Int 表示cut的边数
part_vert为长度为n的list . 表示每个节点所属的聚类编号。
快速开始
此图改编自 Metis 的图 2 manual 使用从零开始的索引,

可以定义并划分为两个图形,其中
