Markov聚类(MCL)模块化计算报错:float对象不可迭代问题求助
Markov聚类(MCL)modularity计算报错排查
问题重现
使用Markov聚类算法对6个数据点聚类时,基于自定义相似性矩阵遍历inflation参数并计算modularity,触发如下错误:
TypeError: 'float' object is not iterable
相关代码片段:
# 遍历1.5到2.5的inflation值并计算modularity for inflation in [i / 10 for i in range(15, 26)]: result = mc.run_mcl(Matrix, inflation=inflation) clusters = mc.get_clusters(result) Q = mc.modularity(matrix=result, clusters=clusters) print("inflation:", inflation, "modularity:", Q)
错误原因
mc.modularity()函数的第一个参数要求传入原始邻接/相似性矩阵,而非mc.run_mcl()返回的MCL迭代结果矩阵。错误传入MCL处理后的矩阵result,导致函数内部处理逻辑出现类型不兼容问题。
注:markov_clustering库的get_clusters()默认返回嵌套列表格式(每个子列表对应一个聚类),因此格式问题并非本次报错的核心原因,但可后续验证确认。
修复方案
将mc.modularity()的matrix参数替换为原始相似性矩阵Matrix:
# 修正后的代码 for inflation in [i / 10 for i in range(15, 26)]: result = mc.run_mcl(Matrix, inflation=inflation) clusters = mc.get_clusters(result) # 传入原始相似性矩阵Matrix而非MCL结果矩阵 Q = mc.modularity(matrix=Matrix, clusters=clusters) print("inflation:", inflation, "modularity:", Q)
额外验证
若仍有异常,可先打印聚类结果格式确认是否符合要求:
print("聚类结果格式:", clusters)
正常输出应为嵌套列表,例如:
聚类结果格式: [[0], [1], [2], [3], [4], [5]]
或
聚类结果格式: [[0,2], [1,4,5], [3]]
内容的提问来源于stack exchange,提问作者aam
相关产品推荐
相关产品推荐

