首页 > 解决方案 > 如何在下面将这个 for 循环矢量化,我需要将值设置为需要舍入的范围?

问题描述

我有一个带有一些值的 np.array q 例如: [1,3,5,7] 。
还有一个 np.array z。有一些我需要四舍五入的值,然后它们被用作
第三个数组“映射”中的索引。

import numpy as np

    q = [1,3,5,7]
    z = [0,50.3,240.4,252.9,256]

    mapping = np.zeros(256)
    for i in range(len(q)):
        print(i)
        start, end = int(round(z[i])), int(round(z[i + 1]))
        mapping[start:end] = int(round(q[i]))

    print(mapping)

这里的输出是:
在此处输入图像描述

标签: pythonnumpyvectorization

解决方案


这是我的方法:

repeats = np.diff(list(np.round(z))+ [256]).astype(int)
# repeats = array([ 49, 191,  12,   3])

np.repeat(np.round(q), repeats)

输出:

array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
       3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5,
       5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7])

注意:这只有 255 个元素,并且与您的预期输出不同,因为,我不太了解您的逻辑。


推荐阅读