首页 > 解决方案 > 使用 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

标签: pythonnumpy

解决方案


如果我理解正确(我认为您正在尝试为一些旋转问题形成哈密顿量,并且您应该能够轻松地进行多达 20 次旋转。如果确实如此,请尝试使用 np.roll 并减少函数来重写您的方法有效),您可以尝试将所有矩阵(即使使用 dims.2X2)转换为稀疏格式(例如 csr 或 csc),并使用 scipy kron 函数,其格式指定为您用来构造所有矩阵的稀疏矩阵格式矩阵。因为据我所知, kron(format=None) 使用矩阵的显式表示会导致内存问题,因此请尝试 format='csc' 例如。


推荐阅读