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

Comment puis-je découper un tableau NumPy 2D en tableaux 2D plus petits ?

DDD
DDDoriginal
2024-11-10 14:42:02827parcourir

How can I Slice a 2D NumPy Array into Smaller 2D Arrays?

Découper des tableaux 2D en tableaux 2D plus petits dans NumPy

Lorsque vous travaillez avec des images ou d'autres données représentées sous forme de tableaux 2D, il est souvent nécessaire de découpez-les en tableaux plus petits pour le traitement ou l’analyse. Dans numpy, cela peut être réalisé en utilisant une combinaison d'opérations de remodelage et de swapaxes.

Pour comprendre l'approche, considérons un exemple. Supposons que nous ayons un tableau 2x4 c:

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

et que nous voulions le découper en deux tableaux 2x2. Nous savons que le premier bloc doit comprendre les éléments des deux premières lignes et des deux premières colonnes, et le deuxième bloc des éléments restants.

L'opération de remodelage peut être utilisée pour remodeler le tableau dans une nouvelle forme, dans ce cas 2x2x3. Le nombre de lignes et de colonnes dans la nouvelle forme est spécifié comme les deux premiers arguments, et le troisième argument, -1, indique à numpy de calculer la dimension nécessaire pour rendre le remodelage valide.

c.reshape(2, 2, -1)

swapaxs puis permute les lignes et les colonnes pour obtenir le format de bloc souhaité :

c.reshape(2, 2, -1).swapaxes(1, 2)

Enfin, une deuxième refonte est utilisée pour aplatir le tableau dans la forme souhaitée :

c.reshape(2, 2, -1).swapaxes(1, 2).reshape(-1, 2, 2)

Le résultat est deux 2x2 tableaux, au choix :

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

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

Le code fourni comprend une fonction, en forme de bloc, qui généralise cette approche de découpage pour tout nombre de blocs souhaité :

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

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