使用numpy数组绘制NetworkX图形出现错误。

8
我有一个numpy数组作为我的邻接矩阵,并希望使用NetworkX将其绘制成简单的无向图,但我一直遇到这个错误:AttributeError: module 'scipy.sparse' has no attribute 'coo_array' 我正在遵循这个特定答案:从CSV文件中的邻接矩阵绘制NetworkX图形,但无法使其工作。唯一的区别是我的邻接矩阵非常大,大约有30000列。
这是我的图形绘制代码:
G = nx.from_numpy_matrix(np.matrix(adj_mtx_np), create_using=nx.DiGraph)
nx.draw(G)
plt.show()

我的Scipy版本是1.8.0


1
你能展示一下你的代码和10列样本数据吗? - noob
我认为您会发现稀疏数组是在scipy 1.8.0中添加的,因此您可能正在使用早期版本。如果您已将scipy导入为sp,则print(sp.__version__)将确认。 - Riley
@RabeeQasem 我已经用我的代码进行了更新。至于我的数据,它是一个常规的邻接矩阵,我不确定如何在这里粘贴它,因为它相当大。 - yxx
@Riley 我已经更新了我的版本。 - yxx
6个回答

10
将networkx降级到2.6.3版本,这对我解决了这个问题。

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community
欢迎来到StackOverflow!没有1.6.3版本,所以我认为你指的是2.6.3。我遇到了同样的问题,降级到了2.63(从2.7.1),现在它可以正常工作了。显然,在最新版本中,即使使用Anaconda解决依赖关系(我已经这样做了),也存在一些包之间的不一致性。简而言之:对我来说,降级到2.6.3版本起作用了。 - A. G.
感谢您的评论。我编辑了我的帖子。再次感谢您。 - hiroki

9

我升级了 scipynetworkx,这样做对我有用。

pip install --upgrade scipy networkx

2

我查看了生成错误的scipy文件("convert_matrix.py")的921行:A = sp.sparse.coo_array((d, (r, c)), shape=(nlen, nlen), dtype=dtype)。

你需要将"coo_array"替换为"coo_matrix"。

所以它应该像这样:A = sp.sparse.coo_matrix((d, (r, c)), shape=(nlen, nlen), dtype=dtype)

这对我的项目已经足够好用了。


目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community
确实是这样做的。 - ITA

0

我也在Windows 10上使用VS Code。我遇到了同样的问题。然后我尝试分别升级scipy和networks,但它们对我没有用。然后我尝试使用以下代码同时升级两者。这样就解决了我的问题。

!pip install --upgrade scipy networkx

在命令提示符中,这段代码应该像这样。尝试以管理员身份打开。
pip install --upgrade scipy networkx

0

我遇到了同样的问题,我使用了

pip install scipy==1.8.1

在Windows系统上它可以工作!我猜这可能是因为之前的版本中'scipy.sparse'没有'coo_array'。

我尝试了第一个答案中的方法,但它们对我没用。我还尝试使用conda将scipy更新到1.8.1,但也无济于事。


0

这些版本的networkx和scipy解决了我的错误

%pip install 'networkx<2.7'

%pip install 'scipy>=1.8'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接