如何调用Python中的库实现和matlab中dctmtx(N)一样的功能

How to call the library in Python to achieve the same function as dctmtx(N) in matlab

在Python中,dct()在scipy中类似于matlab中的dct2(),那么Python中matlab中有没有类似dctmtx的库?

自己搭建很容易:

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

要在 Matlab 中获得与 D = dctmtx(n) 相同的结果,您可以使用

D = dct(np.eye(n), norm='ortho', axis=0)

Paul Panzer 的建议应该也行得通,甚至可能会更快一些。