Maison >développement back-end >Tutoriel Python >Comment découper un tableau Numpy 2D en tableaux 2D plus petits ?

Comment découper un tableau Numpy 2D en tableaux 2D plus petits ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-11 21:27:02737parcourir

How to Slice a 2D Numpy Array into Smaller 2D Arrays?

Découper des tableaux 2D en tableaux 2D plus petits avec Numpy

Numpy est une bibliothèque polyvalente permettant de manipuler des tableaux multidimensionnels en Python. Il propose diverses méthodes de manipulation des tableaux, notamment le découpage pour extraire des sections spécifiques. Cet article explore une solution pour découper un tableau 2D en tableaux 2D plus petits, en émulant l'exemple fourni :

[[1,2,3,4],   ->    [[1,2] [3,4]   
 [5,6,7,8]]          [5,6] [7,8]]

L'approche Reshape et Swapaxes

La solution suggérée exploite les fonctions reshape et swapaxes pour obtenir le découpage souhaité. La fonction reshape modifie la forme du tableau et la fonction swapaxes modifie les axes spécifiés. Dans le code Python suivant, la fonction blockshape encapsule cette approche :

def blockshaped(arr, nrows, ncols):
    h, w = arr.shape
    return (arr.reshape(h//nrows, nrows, -1, ncols)
               .swapaxes(1,2)
               .reshape(-1, nrows, ncols))

Explication :

  • h, w = arr.shape : stocke les dimensions du tableau d'entrée arr.
  • arr.reshape(h//nrows, nrows, -1, ncols) : remodèle le tableau en un tableau à 4 dimensions. Les deux premières dimensions garantissent qu'il comporte des blocs h/nrows, chacun contenant des lignes nrows. La troisième dimension est utilisée pour préserver les colonnes, et la quatrième dimension a des colonnes ncols dans chaque bloc.
  • swapaxes(1,2) : permute les deuxième et troisième dimensions, ce qui permute efficacement les blocs le long des lignes et columns.
  • reshape(-1, nrows, ncols) : remodèle le tableau à la forme souhaitée, composé de h/nrows * w/ncols tableaux 2D, chacun avec des nrows et des ncols.

Exemple d'utilisation

Pour illustrer l'utilisation, considérons l'exemple de tableau c:

np.random.seed(365)
c = np.arange(24).reshape((4, 6))

Slicing c en blocs de 2x3 :

sliced = blockshaped(c, 2, 3)

les tranches contiendront la 2D souhaitée blocs :

[[[ 0  1  2]
  [ 6  7  8]]

 [[ 3  4  5]
  [ 9 10 11]]

 [[12 13 14]
  [18 19 20]]

 [[15 16 17]
  [21 22 23]]]

Conclusion

Cette solution montre comment découper un tableau numpy 2D en tableaux 2D plus petits à l'aide des fonctions reshape et swapaxes. Il offre une approche flexible et efficace pour traiter et manipuler des images ou d'autres matrices.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn