如何调用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 的建议应该也行得通,甚至可能会更快一些。
在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 的建议应该也行得通,甚至可能会更快一些。