我需要计算一个大矩阵的DCT。我的代码似乎适用于较小的矩阵,但对于大小为50000乘50000的矩阵,会出现以下错误:
error: (n>0&&n<=size(x)) failed for the 1st keyword n: ddct2:n=50000
import numpy as np
from scipy import fftpack
# this works fine
y = fftpack.dct(np.random.normal(size = (1000,1000)))
# this throws an error
z = fftpack.dct(np.random.normal(size = (50000,50000)))
如何解决这个问题?非常感谢。
使用scipy.fft
(而不是fftpack
(:似乎对我有效
import numpy as np
import scipy.fft as fft
x = np.random.normal(size=(50000,50000))
y = fft.dct(x)
不过,请注意,一个50000大小的方形ndarray需要20 GB以上。在一次处理那么多数据时,您可能会遇到问题。
版本说明:Python 3.9.2、NumPy 1.19.3、SciPy 1.6.1