Comment découper un tableau 2D en sous-tableaux 2D plus petits dans NumPy ?

Mary-Kate Olsen
Libérer: 2024-11-08 07:08:02
original
212 Les gens l'ont consulté

How to Slice a 2D Array into Smaller 2D Subarrays in NumPy?

Découper des tableaux 2D en sous-tableaux 2D plus petits

Question :
Pouvons-nous subdiviser un tableau 2D en plus petits Tableaux 2D dans NumPy ?

Exemple :
Transformer un tableau 2x4 en deux tableaux 2x2 :

[[1,2,3,4]   ->    [[1,2] [3,4]
 [5,6,7,8]]          [5,6] [7,8]]
Copier après la connexion

Mécanisme :

Au lieu de créer de nouveaux tableaux, une meilleure approche consiste à remodeler le tableau existant à l'aide de reshape() et échangez les axes à l'aide de swapaxes().

Fonction Blockshape :

Vous trouverez ci-dessous l'implémentation de la fonction blockshape :

def blockshaped(arr, nrows, ncols):
    """
    Partitions an array into blocks.

    Args:
        arr (ndarray): The original array.
        nrows (int): Number of rows in each block.
        ncols (int): Number of columns in each block.

    Returns:
        ndarray: Partitioned array.
    """
    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))
Copier après la connexion

Démo :

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

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

Alternative Solution :

blockwise_view de SuperBatFish fournit une autre option, offrant une disposition de blocs différente et une représentation basée sur la vue.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!