python - 使用 np.kron 生成大矩阵时如何避免内存错误
问题描述
我尝试编写一个由 kronecker-products 组成的矩阵
def kron_sparse_2(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p):
kron= sparse.kron(sparse.kron(sparse.kron(sparse.kron(sparse.kron(sparse.kron(sparse.kron(sparse.kron(sparse.kron(sparse.kron(sparse.kron(sparse.kron(sparse.kron(sparse.kron(sparse.kron(a,b),c),d),e),f),g),h),i),j),k),l),m),n),o),p)
return kron
res = 0
for i in sd:
res= res +( kron_sparse_2(i,i,I,I,I,I,I,I,I,I,I,I,I,I,I,I))
sd 中的 i 是 2x2 矩阵。在没有内存问题的情况下,我可以做些什么来进一步计算这个?
我得到的错误是:MemoryError: Unable to allocate 16.0 GiB for an array with shape (536870912, 2, 2) and data type float64
解决方案
如果我理解正确(我认为您正在尝试为一些旋转问题形成哈密顿量,并且您应该能够轻松地进行多达 20 次旋转。如果确实如此,请尝试使用 np.roll 并减少函数来重写您的方法有效),您可以尝试将所有矩阵(即使使用 dims.2X2)转换为稀疏格式(例如 csr 或 csc),并使用 scipy kron 函数,其格式指定为您用来构造所有矩阵的稀疏矩阵格式矩阵。因为据我所知, kron(format=None) 使用矩阵的显式表示会导致内存问题,因此请尝试 format='csc' 例如。
推荐阅读
- mysql - 在mysql中将数字按45分组
- python - 为什么当我在 python 中按下按钮“运行”时它没有给出任何输出?
- unity3d - 自定义着色器不接收光线
- flutter - Flutter web TextField 不显示写在键盘上的文本
- python - 一种能够消除 N 个障碍物的星型算法
- pic - 无法在 MPLABX (PKOB) 上使用 Curiosity HPC,如何让它在当前 IDE 上工作?
- html - 小图标图像添加到 span 类里面
- 标签?
- html - Italic tag not being formatted in Github Pages
- python - 使用 Python 调用 JSON API
- firebase - 如何将 Google App Engine 与 Firebase 结合使用