Python: SciPy DCT 不适用于大矩阵

Python: SciPy DCT does not work on large matrices

我需要计算一个大矩阵的 DCT。我的代码似乎适用于较小的矩阵,但对于大小为 50000 x 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 以上的空间。您可能 运行 遇到一次性处理这么多数据的问题。

版本说明:Python3.9.2,NumPy 1.19.3,SciPy1.6.1