Maison  >  Article  >  développement back-end  >  Comment calculer efficacement les écarts types glissants dans NumPy ?

Comment calculer efficacement les écarts types glissants dans NumPy ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 16:17:02312parcourir

How to Efficiently Calculate Rolling Standard Deviations in NumPy?

Implémentation d'une fenêtre glissante pour les tableaux 1D dans NumPy

La nécessité d'effectuer efficacement des opérations de fenêtre glissante sur des tableaux 1D se pose fréquemment lors de l'analyse et de la manipulation des données . NumPy, une bibliothèque puissante pour les opérations numériques, fournit une solution polyvalente pour cette tâche.

Par exemple, considérons la tâche de calcul des écarts types glissants pour une liste de valeurs 1D. Une implémentation Python de base utilisant des boucles, comme indiqué dans la question, peut être coûteuse en calcul pour les grands ensembles de données.

Solution basée sur NumPy

Pour optimiser ce processus, NumPy propose une approche concise et efficace :

<code class="python">import numpy as np

def rolling_std(array, window):
    return np.std(np.lib.stride_tricks.as_strided(array, shape=array.shape[0] - window + 1, strides=(array.strides[0], array.strides[0])), 1)</code>

La fonction Rolling_std prend deux arguments : le tableau 1D et la taille de fenêtre souhaitée.

La fonction as_strided de NumPy crée une vue du tableau comme s'il ont été divisés en fenêtres superposées, avec une foulée qui permet un calcul efficace.

La fonction np.std calcule ensuite l'écart type le long de la deuxième dimension, effectuant efficacement l'opération de roulement.

Utilisation

Pour calculer les écarts types glissants pour les observations du tableau d'entrée, appelez simplement :

<code class="python">stdev = rolling_std(observations, window_size)</code>

Cette solution est très performante, élimine le besoin de boucles explicites et exploite pleinement Capacités de NumPy pour une manipulation efficace des tableaux.

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