代码之家  ›  专栏  ›  技术社区  ›  gboffi

将数组值分配给连续的间隔

  •  0
  • gboffi  · 技术社区  · 1 年前

    我有一个 levels 大堆

    #                  0    1    2    3   4
    levels = np.array(( 0.2, 0.4, 0.6, 0.8 )) 
    

    和一个 values 阵列,例如。,

    np.random.seed(20230204)
    values = np.random.rand(5)
    

    以及最终的SLOW函数

    def map_into_levels(values, levels):
        result = []
        for n in np.asarray(values):
            for r, level in enumerate(levels):
                if n <= level:
                    break
            else:
                r += 1
            result.append(r)
        return result
    

    所以我有

    In [153]: np.random.seed(20220204)
         ...: values = np.random.rand(6)
         ...: levels = np.array(( 0.2, 0.4, 0.6, 0.8 ))
         ...: result = map_into_levels(values, levels)
         ...: print(levels)
         ...: print(values)
         ...: print(result)
    [0.2 0.4 0.6 0.8]
    [0.00621839 0.23945242 0.87124946 0.56328486 0.5477085  0.88745812]
    [0, 1, 4, 2, 2, 4]
    
    In [154]:
    

    你能给我指一个Numpy原语吗?它可以帮助我加快操作速度?

    1 回复  |  直到 1 年前
        1
  •  1
  •   akuiper    1 年前

    你需要 np.searchsorted 假设 levels 已排序。它 查找应插入元素以维持秩序的索引 :

    np.searchsorted(levels, values)
    # array([0, 1, 4, 2, 2, 4], dtype=int32)