2014-04-15 157 views

回答

21
In [2]: x[x >= 0] 
Out[2]: array([ 0. , 1.2, 2.2, 3.1, 4.4, 8.3, 9.9, 10. , 14. , 16.2]) 
+0

你究竟會稱這個操作是什麼?我有興趣瞭解它是如何工作的 – Jon

4

有可能是一個很酷的方式做,這是numpy的,因爲numpy的是魔術給我,但:

x = np.array([ num for num in x if num >= 0 ]) 
2

numpy:

b = array[array>=0] 

例子:

>>> import numpy as np 
>>> arr = np.array([-2, -1.4, -1.1, 0, 1.2, 2.2, 3.1, 4.4, 8.3, 9.9, 10, 14, 16.2]) 
>>> arr = arr[arr>=0] 
>>> arr 
array([ 0. , 1.2, 2.2, 3.1, 4.4, 8.3, 9.9, 10. , 14. , 16.2]) 
3

如果性能是很重要的,你可以採取的事實,即你的np.array進行排序,並使用numpy.searchsorted

例如:

In [8]: x[np.searchsorted(x, 0) :] 
Out[8]: array([ 0. , 1.2, 2.2, 3.1, 4.4, 8.3, 9.9, 10. , 14. , 16.2]) 

In [9]: %timeit x[np.searchsorted(x, 0) :] 
1000000 loops, best of 3: 1.47 us per loop 

In [10]: %timeit x[x >= 0] 
100000 loops, best of 3: 4.5 us per loop 

隨着陣列尺寸的增加,性能差異將會增加因爲np.searchsorted執行的二進制搜索是O(log n)與O(n)線性搜索x >= 0正在執行的操作。

In [11]: x = np.arange(-1000, 1000) 

In [12]: %timeit x[np.searchsorted(x, 0) :] 
1000000 loops, best of 3: 1.61 us per loop 

In [13]: %timeit x[x >= 0] 
100000 loops, best of 3: 9.87 us per loop