python - 在内存中存储一​​个大的稀疏矩阵来计算特征值

标签 python arrays numpy sparse-matrix

对于我的情况,它是 40000*40000 个元素,我只需要这个矩阵来计算特征值。

我的问题是如何将矩阵存储在内存中,以便我可以找到特征值。以下是有关矩阵的详细信息:

A=np.array([((Nx-2)(Nz-2))[1/4],((Nx-2)(Nz-2))[1/2],((Nx-2)(Nz-2))[2],((Nx-2)(Nz-2))[1/2],((Nx-2)(Nz-2))[1/4]])
diags=np.array([-Nx,-1,0,1,Nx])
M=spdiags(A, diags, (Nx-2)(Nz-2), (Nx-2)(Nz-2)).toarray()
alpha=np.linalg.eigvals(M)

错误

File "C:/Users/mr_lu/Downloads/2d.py", line 106, in <module>
  M=spdiags(A, diags, (Nx-2)*(Nz-2), (Nx-2)*(Nz-2)).toarray()
File "C:\Users\mr_lu\PycharmProjects\2d\venv\lib\site-packages\scipy\sparse\base.py", line 878, in toarray
  return self.tocoo(copy=False).toarray(order=order, out=out)
File "C:\Users\mr_lu\PycharmProjects\2d\venv\lib\site-packages\scipy\sparse\coo.py", line 310, in toarray
  B = self._process_toarray_args(order, out)
File "C:\Users\mr_lu\PycharmProjects\2d\venv\lib\site-packages\scipy\sparse\base.py", line 1184, in _process_toarray_args
  return np.zeros(self.shape, dtype=self.dtype, order=order)
ValueError: array is too big; `arr.size * arr.dtype.itemsize` is larger than the maximum possible size.

最佳答案

处理稀疏矩阵最重要的细节之一是永远不要使用密集矩阵中间体!看来是调用toarray()时出现了内存问题。这是因为您要将 scipy.sparse 矩阵转换为密集 numpy.array。不要使用 numpy 模块来计算稠密矩阵上的特征值,而是尝试使用 scipy.sparse.linalg 函数 eigs 来查找特征值你的稀疏矩阵。

关于python - 在内存中存储一​​个大的稀疏矩阵来计算特征值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51106131/

相关文章:

python - Pybind11 : "ImportError: DLL not found" when trying to import *. Python解释器中的pyd

python - Pybrain:完全线性网络

Python列出数组中每个元素的命名索引?

javascript - 从 javascript 对象中删除数组

python - 如何有效地将 NaN 放入 Pandas Dataframe 中?

python - Scikit Learn - K-Means - 弯头 - 标准

Python requests.post 证书验证失败

javascript - 使用另一个数组的对象键过滤一个对象

python - xyzc 值数组,查找第 3 列是否有任何 c 值等于 1 或不为零的行

python - 如何选择一定量的数据作为numpy数组?