Comment sous-échantillonner une matrice en ne gardant qu'un seul élément tous les n * n blocs avec numpy ?

Published: 04 mars 2021

Tags: Python; Numpy;

DMCA.com Protection Status

Exemple de comment sous-échantillonner une matrice en ne gardant qu'un seul élément tous les n * n blocs avec numpy?

Note: voir aussi how to do downsample a matrix by averaging elements n*n with numpy in python

Créer une matrice

import numpy as np

a = np.random.randint(0,100,(6,6))

print(a)
print(a.shape)

donne par exemple

[[52 87 50 58 75 59]
 [27 40 36 50  9 20]
 [94 54  4  0  6  6]
 [ 5 50 87 74 36 93]
 [15 19  0 79 33 73]
 [51 57 32  8  1 89]]

avec comme dimension

(6, 6)

Gardez un seul élément tous les $n \times n$ blocks

Pour sous-échantillonner une matrice, une solution simple consiste à slice, exemple:

a = a[1::2, 1::2]

print(a)
print(a.shape)

donne

[[40 50 20]
 [50 74 93]
 [57  8 89]]

avec comme dimension

(3, 3)

Références