Maison > développement back-end > Tutoriel Python > Comment créer efficacement des sous-tableaux à partir d'un tableau NumPy avec une foulée ?

Comment créer efficacement des sous-tableaux à partir d'un tableau NumPy avec une foulée ?

Susan Sarandon
Libérer: 2024-12-02 18:18:11
original
1109 Les gens l'ont consulté

How to Efficiently Create Subarrays from a NumPy Array with a Stride?

Prendre des sous-tableaux à partir d'un tableau Numpy avec Stride/Stepsize

Dans ce contexte, nous discutons d'une approche efficace en Python NumPy pour créer des sous-tableaux à partir d'un tableau donné avec une foulée spécifique.

Pour y parvenir, nous explorons deux méthodes :

1. Approche de diffusion :

def broadcasting_app(a, L, S):
    nrows = ((a.size - L) // S) + 1
    return a[S * np.arange(nrows)[:, None] + np.arange(L)]
Copier après la connexion

Dans cette méthode, la diffusion est utilisée pour créer une matrice de foulées.

2. Approche efficace des foulées NumPy :

def strided_app(a, L, S):
    nrows = ((a.size - L) // S) + 1
    n = a.strides[0]
    return np.lib.stride_tricks.as_strided(a, shape=(nrows, L), strides=(S * n, n))
Copier après la connexion

Cette méthode utilise les foulées efficaces de NumPy pour créer la matrice de sous-tableau.

Exemple :

Considérez un tableau a:

a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
Copier après la connexion

Pour créer sous-tableaux de longueur 5 avec une foulée de 3, nous pouvons utiliser l'une ou l'autre des méthodes :

subarrays_broadcasting = broadcasting_app(a, L=5, S=3)
subarrays_strides = strided_app(a, L=5, S=3)
Copier après la connexion

Les deux approches produiront le résultat suivant :

[[ 1  2  3  4  5]
 [ 4  5  6  7  8]
 [ 7  8  9 10 11]]
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!

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