在Python中,scipy中的dct()
与matlab中的dct2()
类似,那么是否有一个类似于Python中matlab中的dctmtx的库?
答案 0 :(得分:1)
要在Matlab中获得与D = dctmtx(n)
相同的结果,可以使用
D = dct(np.eye(n), norm='ortho', axis=0)
保罗·潘泽(Paul Panzer)的建议也应该很好用,甚至可能更快一些。
答案 1 :(得分:0)
构建它很容易:
# 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可能会或可能不会使用相同的缩放比例。