NetworkX模块报错:不存在from_scipy_sparse_matrix属性
问题解决:AttributeError: module 'networkx' has no attribute 'from_scipy_sparse_matrix'
错误原因
NetworkX在2.4版本之后移除了from_scipy_sparse_matrix函数,该功能被重命名为from_scipy_sparse_array,原函数仅作为兼容项保留在nx.convert_matrix子模块中。你的代码调用了已被废弃/移除的顶层函数,因此触发属性错误。
解决方案
有两种可行的修改方式,推荐使用第一种适配新版本的写法:
方式1:使用新版本API(推荐)
将draw_graph函数中的nx.from_scipy_sparse_matrix(A)替换为nx.from_scipy_sparse_array(A):
修改后的核心代码片段:
def draw_graph(A, m=28, ax=None, spring_layout=False, size_factor=10): '''根据邻接矩阵(A)绘制图, 可选择使用spring_layout布局。 ''' assert m**2 == A.shape[0] == A.shape[1] # 创建nx.Graph对象 - 使用新版本API G = nx.from_scipy_sparse_array(A) print('Number of nodes: %d; Number of edges: %d' % \ (G.number_of_nodes(), G.number_of_edges())) # 后续代码保持不变...
方式2:兼容旧版本(不推荐)
若需兼容NetworkX 2.4之前的版本,可调用子模块中的兼容函数:
G = nx.convert_matrix.from_scipy_sparse_matrix(A)
额外注意事项
- 建议将NetworkX升级到2.6及以上版本(
from_scipy_sparse_array在2.6版本正式成为官方推荐API) - 确保SciPy版本与NetworkX版本匹配,避免稀疏矩阵格式不兼容问题
内容的提问来源于stack exchange,提问作者SwDL
相关产品推荐
相关产品推荐

