首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在内存中存储一个大的稀疏矩阵来计算特征值

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

Stack Overflow用户
提问于 2018-06-29 16:38:05
回答 1查看 232关注 0票数 1

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

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

代码语言:javascript
复制
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)

错误

代码语言:javascript
复制
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.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-29 17:07:03

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51106131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档