【发布时间】:2020-06-07 17:16:54
【问题描述】:
我有一个非常大的矩阵。 buildmatrix 是一个 N 乘 N 矩阵。所以 sumHamiltonian 是一个 N^2 × N^2 矩阵。那么 transform(N) 是一个 N^2 乘 N(N-1)/2 矩阵。 (因此得到的 shortHamiltonian(N) 是 N(N-1)/2 乘 N(N-1)/2 矩阵)。矩阵条目也是复数。
如果 N=200,我会收到内存错误。有没有办法改写:
def sumHamiltonian(N):
return 0.5*(np.kron(buildmatrix(N),np.identity(N))+np.kron(np.identity(N),buildmatrix(N)))
def shortHamiltonian(N):
return np.matmul(np.transpose(transform(N)),np.matmul(sumHamiltonian(N),transform(N)))
减少内存?
我已经看到了一些减少矩阵乘法内存的方法 (Python/Numpy MemoryError),这很有帮助,但我的内存错误出现在 kronecker 产品上。有没有办法重写这个,或者更好的是,所有的矩阵运算来避免内存错误?
【问题讨论】:
-
我用一个小的 N 制作数组,并寻找将它们分成块的方法。此外,
sum是 2 个相似的kron的平均值。由于np.idenity,这些kron可能是稀疏的。我会寻找特定于这种情况的模式,而不是希望一些通用的“内存保护程序”。 N^4 变大很快,尤其是当你将两个相加时。
标签: python numpy memory out-of-memory