Python 删除数组中的所有负值
如何高效地从一个数组中去掉负数元素呢?我试过用 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])
我想得到一个这样的数组:
[0, 1.2, 2.2, 3.1, 4.4, 8.3, 9.9, 10, 14, 16.2]
4 个回答
3
我觉得用numpy来做这个事情可能有很酷的方法,因为对我来说,numpy就像魔法一样。不过:
x = np.array( [ num for num in x if num >= 0 ] )
5
在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])
6
如果性能很重要,你可以利用你的 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
46
在编程中,有时候我们会遇到一些问题,想要找到解决办法。StackOverflow是一个很棒的平台,大家可以在这里提问和回答问题。你可以把它想象成一个大型的问答社区,里面有很多经验丰富的程序员,他们乐于分享自己的知识和经验。
当你在StackOverflow上提问时,记得描述清楚你的问题,这样别人才能更好地理解你的困惑,给出有效的建议。通常,问题的描述应该包括你遇到的具体情况、你尝试过的解决方法,以及你希望达到的目标。
如果你看到别人提问,记得也可以帮助他们,分享你的见解和解决方案。这样不仅能帮助他人,也能加深你自己的理解。
总之,StackOverflow是一个学习和交流的好地方,适合所有想要提升编程技能的人。
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])