我试图将一个scipy CSR矩阵A = U + D + L,其中A,U,D,L是scipy.sparse
csr模块的csr_matrix
对象,每个大小为422840乘422840,转换为float64的2d数组。我使用toarray()
来进行转换。但是,我得到了下面的错误:
Code line: A_test = A.toarray()
Error: `File C:\ProgramData\anaconda3\Lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec
exec(code, globals, locals)
File c:\users\soul\soul_spyder\24_july_test_soul.py:561
A_test=A.toarray()
File C:\ProgramData\anaconda3\Lib\site-packages\scipy\sparse\_compressed.py:1051 in toarray
out = self._process_toarray_args(order, out)
File C:\ProgramData\anaconda3\Lib\site-packages\scipy\sparse\_base.py:1298 in _process_toarray_args
return np.zeros(self.shape, dtype=self.dtype, order=order)
MemoryError: Unable to allocate 1.30 TiB for an array with shape (422840, 422840) and data type float64
字符串
我要执行此操作:x=A\B,其中b是一个float64的数组,尺寸为422840乘1,使用np.linalg.solve
。但是,如果不将A转换为2D数组,则无法执行此操作。此外,我还尝试使用a_test = np.asarray(A)
。它给了我一个大小为1的对象模块的ndarray(对象模块的数组)。然而,我需要一个A的二维矩阵,而不是A的对象。如何将大小为422840 × 422840的大稀疏矩阵转换为float64数组?
1条答案
按热度按时间j0pj023g1#
你不能将你的稀疏数组转换成密集数组,因为它太大了,因此会出现错误(它需要太多的内存来存储)。如果你想求解稀疏矩阵Ax=B,请使用scipy的稀疏求解器
scipy.sparse.linalg.spsolve
。字符串