We wensen een rij reële getallen $$x$$ te coderen, en gebruiken hiertoe een reëele,
inverteerbare $$n \times n$$ matrix $$C$$. De gecodeerde versie van $$x$$ ontstaat door rij $$x$$
in groepjes van $$n$$ te verdelen, namelijk
$$
(x_1 \ldots x_n),(x_{n+1} \ldots x_{2n}), \dots
$$
Elk groepje wordt als kolomvector geïnterpreteerd,
en per groepje ontstaat een nieuwe kolomvector, via
$$
\left(
\begin{array}{c}
y_1 \\
y_2 \\
\vdots \\
y_n
\end{array} \right)
=\mathbf{C} \left(
\begin{array}{c}
x_1 \\
x_2 \\
\vdots \\
x_n
\end{array} \right),
\left(
\begin{array}{c}
y_{n+1} \\
y_{n+2} \\
\vdots \\
y_{2n}
\end{array} \right)
=\mathbf{C} \left(
\begin{array}{c}
x_{n+1} \\
x_{n+2} \\
\vdots \\
x_{2n}
\end{array} \right),\ldots
$$
De gecodeerde versie van de rij $$x$$ ontstaat dan door alle kolomvectoren in een rij aaneen te schakelen,
namelijk
$$
\left(
\begin{array}{ccccccc}
y_1 & \ldots & y_n & y_{n+1} & \ldots & y_{2n} & \ldots
\end{array} \right)
$$
Natuurlijk kan het gebeuren dat de lengte van $$x$$ geen geheel veelvoud van $$n$$ bedraagt. In dit geval
vul je $$x$$ aan met 0-elementen tot de lengte van de te coderen rij een geheel veelvoud van $$n$$ bedraagt.
Schrijf een functie $$\verb!codeer()!$$ met twee argumenten, namelijk de codeermatrix $$\verb!C!$$ en
de codeerrij $$\verb!x!$$. Je mag veronderstellen dat $$\verb!C!$$ een reëele, vierkante en
inverteerbare matrix is. Je mag er NIET vanuit gaan dat de lengte van $$\verb!x!$$ een geheel veelvoud
is van het aantal rijen van $$\verb!C!$$.
Schrijf een tweede functie $$\verb!decodeer()!$$ met als argumenten de matrix die gebruikt werd voor de codering, en de
gecodeerde vector. Het resultaat is de gedecodeerde versie van het tweede argument. Hierbij is de lengte van de vector nu
uiteraard wel een geheel veelvoud van het aantal rijen van de codeermatrix.
Voor de functie $$\verb!codeer()!$$ : Een inverteerbare reële matrix als 2D NumPy-tabel (dus een array-type), $$n>0$$ rijen en $$n>0$$ kolommen,
gevold door een te coderen vector, als NumPy-rij (1D).
Voor de functie $$\verb!decodeer()!$$ : Een inverteerbare reële matrix als 2D NumPy-tabel (dus een array-type), $$n>0$$ rijen en $$n>0$$ kolommen,
gevold door een te decoderen vector, als NumPy-rij (1D).
Voor de functie $$\verb!codeer()!$$ : de gecodeerde versie van het tweede argument, als NumPy-rij (1D).
Voor de functie $$\verb!decodeer()!$$ : de gedecodeerde versie van het tweede argument, als NumPy-rij (1D).
C = np.array([[ 0., 1., 2., 3.], [-10., -17., -19., -15.], [25., 31., 9., 12.], [-7., -9., 12., 3.]]) x = np.array([1.0, 2.0, 1.0, 2.0, 7.0, 9.0, 1.0, 1.0, 3.0, 4.0, 10.0]) codeer(C, x) = [ 10. -93. 120. -7. 14. -257. 475. -115. 24. -288. 289. 63.] decodeer(C, np.array([ 10., -93., 120., -7., 14., -257., 475., -115., 24., -288., 289., 63.]) = [1.0 2.0 1.0 2.0 7.0 9.0 1.0 1.0 3.0 4.0 10.0 0.0]