2012-12-16 12 views
5

Chciałbym użyć DCT-II scipy, ponieważ jest już zakodowany i szybki. Patrząc na doc, wydaje się, że jest to implementacja 1D. Czy można go używać w taki sposób, aby wykorzystać go jako implementację 3D? Nie jestem pewien co do matematyki. Czy implementacje 2D i 3D są równoważne z pomnożeniem 2 lub 3 razy 1D przy użyciu różnych wymiarów w obliczeniach?Scipy DCT-II Pythona do 2D lub ND DCT

+1

Nie jestem pewien, masz na myśli poprzez pomnożenie 2 lub 3 razy. Ale na przykład w 2D jest to równoważne z zastosowaniem DCT na kolumnach na wynikach DCT w wierszach. Jest to bezpośrednia równoważność z formulacją DCT i rozciąga się na przypadek N-wymiarowy. – mmgp

+0

OK! Właściwie to miałem na myśli. – macrocosme

Odpowiedz

5

Zasadniczo dodaje załatwia sprawę:

import numpy as np 
from scipy.fftpack import dct, idct 

# Lets create a 3D array and fill it with some values 
a = numpy.random.rand(3,3,3) 

f,x,y = a.shape 
b = np.zeros((f,x,y)) 

b = dct(dct(dct(a).transpose(0,2,1)).transpose(1,2,0)).transpose(1,2,0).transpose(0,2,1) 
Powiązane problemy