我试图在巨大的矩阵和它自己之间找到点积 .
矩阵的形状(371744,36154)NonZero的数字 - 577731 [非常稀疏]
mat1是scipy.sparse.csr_matrix如果我使用 mat1 * mat1.T 我得到一个值错误,这看起来像它,因为在结果矩阵中有太多的非零元素,并且索引指针根据here溢出
dp_data = data_m * data_m.T
File "/usr/lib/python2.7/dist-packages/scipy/sparse/base.py", line 247, in __mul__
return self._mul_sparse_matrix(other)
File "/usr/lib/python2.7/dist-packages/scipy/sparse/base.py", line 300, in _mul_sparse_matrix
return self.tocsr()._mul_sparse_matrix(other)
File "/usr/lib/python2.7/dist-packages/scipy/sparse/compressed.py", line 290, in _mul_sparse_matrix
indices = np.empty(nnz, dtype=np.intc)
ValueError: negative dimensions are not allowed
我也试过 np.dot
但doc说,
"As of NumPy 1.7, np.dot is not aware of sparse matrices, therefore using it will result on unexpected results or errors. The corresponding dense matrix should be obtained first instead"
当我到mat1.toarray()或todense()时,我得到一个内存错误,因为矩阵是巨大的!我有16GB的内存!该程序似乎适用于较小的输入!
data_array = data_m.toarray()
File "/usr/lib/python2.7/dist-packages/scipy/sparse/compressed.py", line 550, in toarray
return self.tocoo(copy=False).toarray()
File "/usr/lib/python2.7/dist-packages/scipy/sparse/coo.py", line 219, in toarray
B = np.zeros(self.shape, dtype=self.dtype)
MemoryError
我正在使用Numpy版本1.8.1 Numpy版本0.9.0
我怎么做这个乘法?