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

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

DDD
Libérer: 2024-11-07 16:21:02
original
719 Les gens l'ont consulté

How to Slice a 2D Array into Smaller 2D Arrays with NumPy?

Découper un tableau 2D en tableaux 2D plus petits avec Numpy

Souvent, il devient nécessaire de diviser un tableau 2D en tableaux 2D plus petits. Par exemple, considérons la tâche consistant à diviser un tableau 2x4 en deux tableaux 2x2.

Solution :

Une combinaison de fonctions de remodelage et de swapaxes s'avère efficace dans ce scénario :

import numpy as np

def blockshaped(arr, nrows, ncols):
    """
    Converts a 2D array into a 3D array with smaller subblocks.
    """
    h, w = arr.shape
    assert h % nrows == 0, f"{h} rows is not divisible by {nrows}"
    assert w % ncols == 0, f"{w} columns is not divisible by {ncols}"

    return (arr.reshape(h//nrows, nrows, -1, ncols)
               .swapaxes(1,2)
               .reshape(-1, nrows, ncols))
Copier après la connexion

Exemple d'utilisation :

Considérez le tableau suivant :

c = np.arange(24).reshape((4, 6))
print(c)
Copier après la connexion

Sortie :

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
Copier après la connexion

Découper ceci tableau en blocs plus petits :

print(blockshaped(c, 2, 3))
Copier après la connexion

Sortie :

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

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

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

 [[15 16 17]
  [21 22 23]]]
Copier après la connexion

Remarques supplémentaires :

  • La fonction de déblocage peut être utilisée pour inversez le découpage.
  • blockwise_view de Superbatfish offre une alternative avec son format distinct.

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