2010-12-02 8 views
6

Tal vez no sea un gran problema, pero me rompe el corazón para seguir este:¿Puedo limpiar una matriz numpy sin un bucle?

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

con esto:

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

Para este ejemplo en particular ... ¿hay una mejor manera de hacer la parte de limpieza?

Pregunta segunda: ¿Qué ocurre si las reglas de limpieza son más complicadas o menos complicadas que en este ejemplo? Por ejemplo, podríamos querer cambiar todos los números negativos a cero. O bien, podríamos estar haciendo un mapeo más complicado.

Respuesta

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

también posible, y un poco más rápido es

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

editar deltas [(deltas <0) | (deltas> 100)] = 0 – Pete

+0

@Pete: ¡Ups, gracias! – unutbu

1

Trate de usar numpy.vectorize para aplicar una función a cada elemento de la matriz numpy.

Cuestiones relacionadas