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
Libérer: 2024-11-10 14:42:02
original
821 Les gens l'ont consulté

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))
Copier après la connexion

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)
Copier après la connexion

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

c.reshape(2, 2, -1).swapaxes(1, 2)
Copier après la connexion

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)
Copier après la connexion

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]]]
Copier après la connexion

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))
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal