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

时间:2019-03-27 03:02:23

标签: python matlab numpy scipy dct

在Python中,scipy中的dct()与matlab中的dct2()类似,那么是否有一个类似于Python中matlab中的dctmtx的库?

2 个答案:

答案 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可能会或可能不会使用相同的缩放比例。