如何在 Python 中调用库以实现与 matlab 中的 dctmtx(N) 相同的功能


在 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 可能会也可能不会使用相同的缩放。

最新更新