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

Comment puis-je diviser un tableau NumPy 2D en tableaux 2D plus petits ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-09 07:44:02287parcourir

How can I divide a NumPy 2D array into smaller 2D arrays?

Découper des tableaux 2D en tableaux plus petits

Problème :
Vous souhaitez fragmenter un élément bidimensionnel ( 2D) Tableau NumPy en tableaux 2D plus petits. Par exemple, vous souhaiterez peut-être transformer un tableau 2x4 en deux tableaux 2x2.

Solution :
Une combinaison de fonctions de remodelage et de swapaxes vous permet de diviser votre tableau en "blocs". " Voici une implémentation Python qui y parvient :

def blockshaped(arr, nrows, ncols):
    h, w = arr.shape
    assert h % nrows == 0, f"{h} rows is not evenly divisible by {nrows}"
    assert w % ncols == 0, f"{w} cols is not evenly divisible by {ncols}"

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

Dans cette solution :

  • nrows et ncols définissent les dimensions de chaque tableau plus petit.
  • Vous devez vous assurer que le tableau d'entrée est divisible uniformément par ces valeurs.
  • La fonction reshape réorganise le tableau en blocs.
  • La fonction swapaxes permute les axes pour obtenir la forme souhaitée.
  • La refonte finale aplatit le tableau en une séquence de blocs plus petits.

Exemple :

Considérez le tableau d'entrée suivant :

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

print(c)

[out]:
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]

En utilisant blockshape avec nrows=2 et ncols=3, vous pouvez fragmenter ce tableau en blocs suivants :

print(blockshaped(c, 2, 3))

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

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

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

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

Cette démonstration illustre comment découper un tableau 2D en tableaux rectangulaires plus petits de dimensions spécifiées.

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