2010-12-02 68 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的數組的每個元素。

相關問題