Python删除数组中的所有负值

Python删除数组中的所有负值,python,arrays,numpy,Python,Arrays,Numpy,移除数组中的负元素最有效的方法是什么?我尝试了numpy.delete和x[x!=I]形式的代码 用于: 我希望最终得到一个数组: [0, 1.2, 2.2, 3.1, 4.4, 8.3, 9.9, 10, 14, 16.2] 也许有一种很酷的方法是numpy,因为numpy对我来说很神奇,但是: x = np.array( [ num for num in x if num >= 0 ] ) 在努比: b = array[array>=0] 例如: >>>

移除数组中的负元素最有效的方法是什么?我尝试了
numpy.delete
x[x!=I]
形式的代码

用于:

我希望最终得到一个数组:

[0, 1.2, 2.2, 3.1, 4.4, 8.3, 9.9, 10, 14, 16.2]

也许有一种很酷的方法是numpy,因为numpy对我来说很神奇,但是:

x = np.array( [ num for num in x if num >= 0 ] )
在努比:

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])

如果性能很重要,您可以利用
np.array
已排序并使用

例如:

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(logn)二进制搜索,而
x>=0
执行的是O(n)线性搜索,因此性能差异将随着数组大小的增加而增加

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

你会把这个手术叫做什么?我很想知道它到底是如何工作的它的numpy.where(快捷方式)和numpy切片相结合
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
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