2010-12-02 67 views
6

也许不是什么大不了的,但它打破我的心脏跟着这样的:我可以在没有循环的情况下清理一个numpy数组吗?

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

与此:

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

对于这个特殊的例子......有没有更好的办法做清洁的一部分?

问题第二部分:如果清理规则比这个示例更复杂或更简单,该怎么办?例如,我们可能只想将所有负数更改为零。或者,我们可能正在做一个更复杂的映射。

回答

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

也是可以的,有点快是

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

编辑为deltas [(deltas <0)| (deltas> 100)] = 0 – Pete 2010-12-02 22:29:52

1

尝试使用numpy.vectorize到功能应用到numpy的数组的每个元素。

相关问题