Med*_*ata 10 python arrays numpy
删除数组中负面元素的最有效方法是什么?我已尝试numpy.delete并从表单的数组和代码中删除所有特定值x[x != i].
对于:
import numpy as np
x = np.array([-2, -1.4, -1.1, 0, 1.2, 2.2, 3.1, 4.4, 8.3, 9.9, 10, 14, 16.2])
Run Code Online (Sandbox Code Playgroud)
我想最终得到一个数组:
[0, 1.2, 2.2, 3.1, 4.4, 8.3, 9.9, 10, 14, 16.2]
Run Code Online (Sandbox Code Playgroud)
Sie*_*ter 28
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])
Run Code Online (Sandbox Code Playgroud)
在numpy中:
b = array[array>=0]
Run Code Online (Sandbox Code Playgroud)
例子:
>>> 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])
Run Code Online (Sandbox Code Playgroud)
如果性能很重要,则可以利用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
Run Code Online (Sandbox Code Playgroud)
性能差异将随着数组大小的增加而增加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
Run Code Online (Sandbox Code Playgroud)