【问题标题】:Python removing all negative values in arrayPython删除数组中的所有负值
【发布时间】:2014-05-30 13:22:15
【问题描述】:

删除数组中的负元素最有效的方法是什么?我试过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


    【解决方案1】:
    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])
    

    【讨论】:

    • 您将这个操作称为什么?我有兴趣了解它是如何工作的
    • 它的 numpy.where(快捷方式)和 numpy 切片相结合
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-21
          • 2016-07-13
          • 2015-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多