gpt4 book ai didi

numpy - ValueError 在 SciPy 中取两个稀疏矩阵的点积

转载 作者:行者123 更新时间:2023-12-01 12:51:36 24 4
gpt4 key购买 nike

我正在尝试取两个 lil_matrix 稀疏矩阵的点积,它们大约为分别为 100,000 x 50,000 和 50,000 x 100,000。

from scipy import sparse
a = sparse.lil_matrix((100000, 50000))
b = sparse.lil_matrix((50000, 100000))

c = a.dot(b)

出现这个错误:

 File "/usr/lib64/python2.6/site-packages/scipy/sparse/base.py", line 211, in dot
return self * other
File "/usr/lib64/python2.6/site-packages/scipy/sparse/base.py", line 247, in __mul__
return self._mul_sparse_matrix(other)
File "/usr/lib64/python2.6/site-packages/scipy/sparse/base.py", line 300, in _mul_sparse_matrix
return self.tocsr()._mul_sparse_matrix(other)
File "/usr/lib64/python2.6/site-packages/scipy/sparse/compressed.py", line 290, in _mul_sparse_matrix
indices = np.empty(nnz, dtype=np.intc)
ValueError: negative dimensions are not allowed

关于可能发生的事情的任何想法 - 在具有大约 64GB 内存的机器上运行它,并在执行点时使用大约 13GB。

最佳答案

这是一个糟糕的错误信息,但“问题”很简单,就是你的结果矩阵太大(有太多非零元素,不是它的维度)。

Scipy 使用 int32 来存储 indptrindices 用于稀疏格式。这意味着您的稀疏矩阵不能超过(大约)2^31 个非零元素。也许您可以将 scipy 中的代码更改为使用 int64uint32,如果这不仅仅是一个玩具问题的话。但也许使用稀疏矩阵无论如何都不是解决这个问题的最佳解决方案?

编辑:这在新的 scipy 版本 AFIAK 中得到解决。

关于numpy - ValueError 在 SciPy 中取两个稀疏矩阵的点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12113498/

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