Exemples de comment sous-échantillonner une matrice en faisant la moyenne sur n * n éléments avec numpy en python:
Créer une matrice
Créons d'abord une simple avec numpy:
Note: voir aussi la note how to upsample an array by repeating elements using numpy in python
import numpy as np
a = np.array([[0,1], [2,3]])
a = np.kron(a, np.ones((3,3)))
print(a)
donne
[[0. 0. 0. 1. 1. 1.]
[0. 0. 0. 1. 1. 1.]
[0. 0. 0. 1. 1. 1.]
[2. 2. 2. 3. 3. 3.]
[2. 2. 2. 3. 3. 3.]
[2. 2. 2. 3. 3. 3.]]
et
print(a.shape)
donne
(6, 6)
Sous-échantillonner la matrice a en faisant la moyenne sur 2 * 2 éléments
Exemple de sous-échantillonnage en faisant la moyenne de 2 par 2 éléments dans la matrice a:
n = 2
b = a.shape[0]//n
a_downsampled = a.reshape(-1, n, b, n).sum((-1, -3)) / n
print(a_downsampled)
donne
[[0. 1. 2.]
[2. 3. 4.]
[4. 5. 6.]]
Utilisation d'une convolution 2D
Un autre exemple en utilisant cette fois scipy.signal.convolve2d
from scipy.signal import convolve2d
kernel = np.ones((n, n))
convolved = convolve2d(a, kernel, mode='valid')
a_downsampled = convolved[::n, ::n] / n
print(a_downsampled)
donne:
[[0. 1. 2.]
[2. 3. 4.]
[4. 5. 6.]]