我正在尝试对非常大的数组执行计算,尺寸为65536 x 65536.由于我读到np.memmap可以允许我执行核心计算以便我不受内存限制我试图这样做。此方法适用于小型数组,如8192 x 8192.但是,当我尝试更大的维度时,我得到一个总线错误(核心转储)。可能导致此问题的原因是什么?我怎样才能克服它?非常感谢任何建议。代码如下。我有2个数组X和Y,以二进制格式存储,我加载并执行计算。另外,我有一个128 GB的RAM,因此在分配这些新阵列时没有问题。
import numpy as np
X = np.memmap('X.bin',dtype='float64',mode='r',shape=(65536,65536))
Y = np.memmap('Y.bin',dtype='float64',mode='r',shape=(65536,65536))
A = np.fft.rfft2(np.fft.fftshift(X))
B = np.fft.rfft2(Y)
C = np.fft.irfft2(A*B)
alpha_x,alpha_y = np.gradient(C,edge_order=2)
一起,这将是
alpha_x,alpha_y = np.gradient(np.fft.irfft2(np.fft.rfft2(Y)*np.fft.rfft2(np.fft.fftshift(X))),edge_order=2)