numpy 将数组值赋给连续的间隔

xjreopfe  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(125)

我有一个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原语吗?

fzsnzjdm

fzsnzjdm1#

假设levels已经排序了,你需要np.searchsorted。它 * 找到应该插入元素以保持顺序的索引 *:

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

相关问题