2010-12-02 6 views
6

Vielleicht nicht so eine große Sache, aber es bricht mir das Herz, dies zu folgen:Kann ich ein numpliges Array ohne Schleife reinigen?

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

mit diesem:

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

Für dieses spezielle Beispiel ... gibt es eine bessere Art und Weise zu den Reinigungsteil machen?

Frage Teil zwei: Was ist, wenn die Reinigungsregeln komplizierter oder weniger kompliziert als dieses Beispiel sind. Zum Beispiel möchten wir vielleicht nur alle negativen Zahlen auf Null ändern. Oder wir machen vielleicht ein komplizierteres Mapping.

Antwort

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

auch möglich und ein wenig schneller ist

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

bearbeiten zu Deltas [(Deltas <0) | (deltas> 100)] = 0 – Pete

+0

@Pete: Whoops, danke! – unutbu

1

numpy.vectorize Versuchen unter Verwendung einer Funktion zu jedem Element des Arrays numpy anzuwenden.

Verwandte Themen