Python删除数组中的所有负值

问题描述 投票:8回答:4

删除数组中负面元素的最有效方法是什么?我尝试过numpy.deleteRemove all specific value from array以及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])

我想最终得到一个数组:

[0, 1.2, 2.2, 3.1, 4.4, 8.3, 9.9, 10, 14, 16.2]
python arrays numpy
4个回答
25
投票
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])

4
投票

这可能是一个很酷的方法,因为numpy对我来说很神奇,但是:

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

4
投票

如果性能很重要,你可以利用你的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)与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

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])
© www.soinside.com 2019 - 2024. All rights reserved.