2010-12-02 9 views
6

Peut-être pas un gros problème, mais il me brise le cœur de suivre ceci:Puis-je nettoyer un tableau numpy sans boucle?

deltas = data[1:] - data[:-1]

avec ceci:

for i in range(len(deltas)): 
     if deltas[i] < 0: deltas[i] = 0 
     if deltas[i] > 100: deltas[i] = 0 

Pour cet exemple ... est-il une meilleure façon de faire la partie de nettoyage?

Question deuxième partie: Et si les règles de nettoyage sont plus compliquées, ou moins compliquées que cet exemple. Par exemple, nous pourrions simplement vouloir changer tous les nombres négatifs à zéro. Ou, nous pourrions faire une cartographie plus compliquée.

Répondre

9
import numpy as np 
deltas=np.diff(data) 
deltas[deltas<0]=0 
deltas[deltas>100]=0 

également possible, et un peu plus rapide est

deltas[(deltas<0) | (deltas>100)]=0 
+0

éditer avec deltas [(deltas <0) | (deltas> 100)] = 0 – Pete

+0

@Pete: Oups, merci! – unutbu

1

Essayez d'utiliser numpy.vectorize pour appliquer une fonction à chaque élément de la matrice numpy.