Maison  >  Article  >  développement back-end  >  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
DDDoriginal
2024-11-07 16:21:02601parcourir

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))

Exemple d'utilisation :

Considérez le tableau suivant :

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

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]]

Découper ceci tableau en blocs plus petits :

print(blockshaped(c, 2, 3))

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]]]

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!

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