Как вызвать библиотеку в Python для достижения той же функции, что и dctmtx (N) в matlab - PullRequest
0 голосов
/ 27 марта 2019

В Python dct() в scipy похож на dct2() в matlab, так есть ли библиотека, похожая на dctmtx в matlab в Python?

Ответы [ 2 ]

2 голосов
/ 27 марта 2019

Чтобы получить тот же результат, что и D = dctmtx(n) в Matlab, вы можете использовать

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

Предложение Пола Панцера также должно работать нормально и даже может быть немного быстрее.

0 голосов
/ 27 марта 2019

Достаточно просто построить его самостоятельно:

# 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 может использовать или не использовать одинаковое масштабирование.

...