2013-04-30 45 views
4

我想保持滿足兩個或多個條件的陣列的值,例如numpy的數組的值:保持滿足兩個或多個條件

a = np.array([1,3,5,6,4,6,7,8,9]) 

我想保持僅是大於3的值而小於7次,我需要的輸出是:

array([5, 6, 4, 6]) 

我看到做這件事:

a = a[(a > 3) * (a < 7)] 

但AB的東西出這種乘法感覺多餘,我認爲我錯過了一個像這樣的內置方法。

+0

據我所知是沒有短路,說實話,這個人是不是太冗餘:它說,正是你想要的簡潔,從一個數組a,該項目小於7且大於3 – 2013-04-30 23:34:36

+6

通常你會做'a [(a> 3)&(a <7)]' – jamylak 2013-04-30 23:34:42

+0

@jamylak,我新的我錯過了一些東西:)。謝謝。 – Akavall 2013-04-30 23:37:32

回答

3

只是爲了好玩: 我糾正它,以反映使用numpy數組。

import timeit 
import numpy as np 
a =np.array([1,3,5,6,4,6,7,8,9]) 
t1= timeit.Timer('a[(a > 3) * (a < 7)]', 'from __main__ import a') 
t2= timeit.Timer('a[(a > 3) & (a < 7)]','from __main__ import a') 
t3 =timeit.Timer('[e for e in a if e < 7 and e > 3]','from __main__ import a') 


print t1.timeit(1000)/1000 
print t2.timeit(1000)/1000 
print t3.timeit(1000)/1000 


>>> 
1.01280212402e-05 
1.23770236969e-05 
1.51431560516e-05 

運行它第二次

1.06210708618e-05 
1.16641521454e-05 
1.76239013672e-05 
相關問題