在 Python 中,
scipy 中的 dct()
类似于 matlab 中的 dct2()
,那么在 Python 中是否有类似于 matlab 中的 dctmtx 库呢?
要获得与 Matlab 中D = dctmtx(n)
相同的结果,您可以使用
D = dct(np.eye(n), norm='ortho', axis=0)
Paul Panzer的建议也应该可以正常工作,甚至可能更快一些。
自己构建它很容易:
# pick a size
N = 99
# build the matrix
n, k = np.ogrid[1:2*N+1:2, :N]
dctmtx = 2 * np.cos(np.pi/(2*N) * n * k)
# create random data for testing
x = np.random.normal(size=(N, N))
# check
from scipy import fftpack
np.allclose(fftpack.dctn(x), dctm.T @ x @ dctm)
# True
注意:缩放我的受惯例约束。在这里,我选择了一个完全匹配scipy.fftpack.dctn
;MATLAB 可能会也可能不会使用相同的缩放。