【问题标题】:Replacing values in numpy array based on inequalities基于不等式替换numpy数组中的值
【发布时间】:2017-12-11 17:47:12
【问题描述】:

给定一个 numpy 数组,我想根据不等式替换它的值。例如,给定

x=np.array([0.3,7,8,-5.5,1,0.1]) 

我想将小于0的值替换为0,介于0和5之间的值将替换为1,其余的将替换为2。所以我想得到:

x=np.array([1,2,2,0,1,1]) 

我可以使用pandas.cut 做到这一点,如下所示:

pandas.cut(pandas.DataFrame(x).iloc[:,0],[-np.inf,0,5,np.inf],labels=[0,1,2],right=False)

但我想知道是否有更直接的方法可以使用 numpy 本身来做到这一点。请注意,我可以有超过 3 个类别,这就是为什么我要寻找更系统的东西,其行为类似于 pandas.cut

【问题讨论】:

    标签: python arrays pandas numpy


    【解决方案1】:

    为什么不直接使用digitize

    import numpy as np
    x = np.array([0.3,7,8,-5.5,1,0.1]) 
    bins = np.array([-np.inf,0,5,np.inf])
    np.digitize(x, bins) - 1 # Results are 1-based index
    # array([1, 2, 2, 0, 1, 1], dtype=int64)
    

    【讨论】:

      【解决方案2】:

      完美设置以利用 np.searchsorted -

      np.searchsorted([0,5],x)
      

      这可以扩展以合并通用数量的 bin 元素。因此,一般来说 -

      bins = [0,5]
      out = np.searchsorted(bins,x)
      

      示例运行 -

      In [46]: x
      Out[46]: array([ 0.3,  7. ,  8. , -5.5,  1. ,  0.1])
      
      In [47]: np.searchsorted([0,5],x)
      Out[47]: array([1, 2, 2, 0, 1, 1])
      
      In [55]: np.searchsorted([0,2,5],x)
      Out[55]: array([1, 3, 3, 0, 1, 1])
      
      In [60]: np.searchsorted([0,2,5,7],x)
      Out[60]: array([1, 3, 4, 0, 1, 1])
      

      【讨论】:

        猜你喜欢
        • 2013-09-11
        • 1970-01-01
        • 2019-09-26
        • 2012-05-07
        • 1970-01-01
        • 1970-01-01
        • 2011-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多