Maison >développement back-end >Tutoriel Python >Comment la marche avancée peut-elle améliorer l'efficacité des filtres de moyenne mobile ?

Comment la marche avancée peut-elle améliorer l'efficacité des filtres de moyenne mobile ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-19 10:28:021070parcourir

How Can Advanced Striding Enhance the Efficiency of Moving Average Filters?

Utilisation de la marche avancée pour un filtre de moyenne mobile plus efficace

Introduction :

Calcul du déplacement les filtres moyens sur de grands ensembles de données peuvent être coûteux en termes de calcul. Bien que les implémentations standard utilisant des filtres de convolution puissent être lentes, les techniques avancées de foulée offrent une solution plus efficace.

Technique proposée :

La technique proposée implique l'utilisation de stride_tricks.as_strided( ) fonction pour créer un tableau qui correspond à une fenêtre mobile sur le tableau d'origine. En faisant rouler ce tableau verticalement et horizontalement, les valeurs du noyau peuvent être efficacement additionnées pour calculer la moyenne de chaque pixel.

Implémentation :

Le code suivant démontre l'implémentation de cette technique :

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

filtsize = 3
a = numpy.arange(100).reshape((10,10))
b = np.lib.stride_tricks.as_strided(a, shape=(a.size,filtsize), strides=(a.itemsize, a.itemsize))
for i in range(0, filtsize-1):
    if i > 0:
        b += numpy.roll(b, -(pow(filtsize,2)+1)*i, 0)
filtered = (numpy.sum(b, 1) / pow(filtsize,2)).reshape((a.shape[0],a.shape[1]))</code>

Avantages :

Cette technique offre plusieurs avantages par rapport aux filtres de convolution traditionnels :

  • Efficacité de la mémoire : Le tableau as_strided est une vue dans le tableau d'origine, il ne nécessite donc pas de copier l'intégralité de l'ensemble de données dans un nouveau tableau.
  • Efficacité de calcul : Les opérations de roulement et de sommation peuvent être effectué efficacement à l'aide des fonctions optimisées de NumPy.
  • Taille et forme du noyau personnalisables : Le paramètre filtsize permet d'ajuster facilement la taille et la forme du filtre.

Limitations :

  • Gestion des bords : La technique proposée ne gère pas correctement les pixels de bord. Des étapes de post-traitement peuvent être nécessaires pour résoudre ce problème.
  • Tableaux multidimensionnels : Cette technique est la mieux adaptée aux tableaux unidimensionnels. Pour les tableaux multidimensionnels, l'utilisation de la mémoire et le coût de calcul peuvent devenir prohibitifs.

Approches alternatives :

  • Compilation Numba JIT : Just-in- la compilation temporelle peut encore améliorer les performances de cette technique.
  • Module ndimage de SciPy : pour les tableaux multidimensionnels, la fonction uniform_filter() de SciPy offre une solution plus efficace et plus complète.

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