Comment diviser une matrice 2D en plusieurs matrices 2D avec numpy en python ?

Exemples de comment diviser une matrice 2D en plusieurs matrices 2D avec numpy en python:

Créer une matrice 2D

Créons par exemple une matrice 2D de taille (m,n) = (9,9)

import numpy as np

x = np.arange(81)
x = x.reshape(9,9)

print(x)

donne ici

[[ 0  1  2  3  4  5  6  7  8]
 [ 9 10 11 12 13 14 15 16 17]
 [18 19 20 21 22 23 24 25 26]
 [27 28 29 30 31 32 33 34 35]
 [36 37 38 39 40 41 42 43 44]
 [45 46 47 48 49 50 51 52 53]
 [54 55 56 57 58 59 60 61 62]
 [63 64 65 66 67 68 69 70 71]
 [72 73 74 75 76 77 78 79 80]]

Diviser une matrice 2D en une liste de plusieurs matrice 3 * 3

Pour diviser une matrice 2D en une liste de plusieurs matrice 3 * 3, une solution simple consiste à utiliser numpy.split.

Par exemple, séparons d'abord le tableau le long de l'axe 0 :

l = np.array_split(x,3,axis=0)

notez que numpy.split renvoie une liste

print(type(l))
print(len(l))

donne

<class 'list'>

et

3

Maintenant, divisez à nouveau les tableaux mais le long de l'axe 1 :

new_l = []
for a in l:
    l = np.array_split(a,3,axis=1)
    new_l += l

alors

print(new_l)
print(len(new_l))

donne

[array([[ 0,  1,  2],
             [ 9, 10, 11],
             [18, 19, 20]]), 
             array([[ 3,  4,  5],
             [12, 13, 14],
             [21, 22, 23]]), 
             array([[ 6,  7,  8],
             [15, 16, 17],
             [24, 25, 26]]), 
             array([[27, 28, 29],
             [36, 37, 38],
             [45, 46, 47]]),
             array([[30, 31, 32],
             [39, 40, 41],
             [48, 49, 50]]), 
             array([[33, 34, 35],
             [42, 43, 44],
             [51, 52, 53]]),
             array([[54, 55, 56],
             [63, 64, 65],
             [72, 73, 74]]), 
             array([[57, 58, 59],
             [66, 67, 68],
             [75, 76, 77]]), 
             array([[60, 61, 62],
             [69, 70, 71],
             [78, 79, 80]])]

et

9

Un autre exemple utilisant numpy.split

Un autre exemple avec une matrice de taille(10,9)

import numpy as np

x = np.arange(90)
x = x.reshape(10,9)

print(x)

donne ici

[[ 0  1  2  3  4  5  6  7  8]
 [ 9 10 11 12 13 14 15 16 17]
 [18 19 20 21 22 23 24 25 26]
 [27 28 29 30 31 32 33 34 35]
 [36 37 38 39 40 41 42 43 44]
 [45 46 47 48 49 50 51 52 53]
 [54 55 56 57 58 59 60 61 62]
 [63 64 65 66 67 68 69 70 71]
 [72 73 74 75 76 77 78 79 80]
 [81 82 83 84 85 86 87 88 89]]

dans la division le long de l'axe = 0

l = np.array_split(x,3,axis=0)

va donner 3 tableaux de taille (4,9) (3,9) (3,9) puisque n = 10 = 4 + 3 + 3:

[array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8],
             [ 9, 10, 11, 12, 13, 14, 15, 16, 17],
             [18, 19, 20, 21, 22, 23, 24, 25, 26],
             [27, 28, 29, 30, 31, 32, 33, 34, 35]]), array([[36, 37, 38, 39, 40, 41, 42, 43, 44],
             [45, 46, 47, 48, 49, 50, 51, 52, 53],
             [54, 55, 56, 57, 58, 59, 60, 61, 62]]), array([[63, 64, 65, 66, 67, 68, 69, 70, 71],
             [72, 73, 74, 75, 76, 77, 78, 79, 80],
             [81, 82, 83, 84, 85, 86, 87, 88, 89]])]

Ensuite

new_l = []
for a in l:
    l = np.array_split(a,3,axis=1)
    new_l += l

donne

[array([[ 0,  1,  2],
             [ 9, 10, 11],
             [18, 19, 20],
             [27, 28, 29]]), array([[ 3,  4,  5],
             [12, 13, 14],
             [21, 22, 23],
             [30, 31, 32]]), array([[ 6,  7,  8],
             [15, 16, 17],
             [24, 25, 26],
             [33, 34, 35]]), array([[36, 37, 38],
             [45, 46, 47],
             [54, 55, 56]]), array([[39, 40, 41],
             [48, 49, 50],
             [57, 58, 59]]), array([[42, 43, 44],
             [51, 52, 53],
             [60, 61, 62]]), array([[63, 64, 65],
             [72, 73, 74],
             [81, 82, 83]]), array([[66, 67, 68],
             [75, 76, 77],
             [84, 85, 86]]), array([[69, 70, 71],
             [78, 79, 80],
             [87, 88, 89]])]

Notez que dans cet exemple, la liste des tableaux 2D plus petits n'a pas la même taille car il n'est pas possible de décomposer un tableau (10,9) en tableaux (3,3)!

Références