scipy 将稀疏csr矩阵(422840 x 422840)转换为数组

62o28rlo  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(109)

我试图将一个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数组?

j0pj023g

j0pj023g1#

你不能将你的稀疏数组转换成密集数组,因为它太大了,因此会出现错误(它需要太多的内存来存储)。如果你想求解稀疏矩阵Ax=B,请使用scipy的稀疏求解器scipy.sparse.linalg.spsolve

from scipy.sparse.linalg import spsolve

x = spsolve(A,b)

字符串

相关问题