Gegeven een 2-dimensionale NumPy-tabel x, bestaande uit floats. Programmeer de functies dct_2() en idct_2() met als enig argument deze tabel. Het resultaat van deze functies is respectievelijk de 2D DCT-II van deze argumenttabel en de inverse 2D DCT-II van deze argumenttabel. Het resultaat is dus telkens een tabel in 2 dimensies, van identieke vorm als x (en elk element van de resultaattabel is opnieuw een float).

Programmeer deze functies ZONDER gebruik te maken van for-lussen (het kan een goed idee zijn om de originele formules als controle te programmeren).

Voorbeeld

x = np.array([[1, 2, -1, -3],[4, 5, -1, 2],[3, 8, 2, -1]], dtype = float)
#[[ 1.  2. -1. -3.]
# [ 4.  5. -1.  2.]
# [ 3.  8.  2. -1.]]

X = dct_2(x)
#[[ 21.          14.97904681  -6.36396103 -10.03135866]
# [-11.25833025  -0.99424072   3.06186218   2.40030944]
# [ -4.5          1.27373392  -5.30330086   2.15118616]]

x2 = idct_2(X)
#[[ 1.  2. -1. -3.]
# [ 4.  5. -1.  2.]
# [ 3.  8.  2. -1.]]