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)!