Python 在下面的循环中,我需要将值设置为需要舍入的范围,如何将其矢量化?

Python 在下面的循环中,我需要将值设置为需要舍入的范围,如何将其矢量化?,python,numpy,vectorization,Python,Numpy,Vectorization,我有一个np.array q,其中有一些值,例如:[1,3,5,7]。 和一个np.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

我有一个np.array q,其中有一些值,例如:[1,3,5,7]。
和一个np.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)

这里的输出是:
以下是我的方法:

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个元素,与您的预期输出不同,因为我不太理解您的逻辑。

映射应该从
0开始,因为1介于1和50之间?为什么1最多只能运行50个,而5最多运行253个?是圆的吗?@quanghaang你说得对!,它应该从0开始,您在我的for循环代码中发现了一个错误,即使没有人会找到答案,我至少很高兴您对我的代码进行了代码检查。谢谢修正我的问题。你的起点和终点充其量是不一致的…请编辑问题,使其一致并有意义,我很乐意提供答案。哇!伟大的解决方案!!非常感谢。太优雅了。我对你的代码做了一个小修改,你能更新你的代码吗?repeats=np.diff(list(np.round(z))).astype(int)your_array=np.repeat(np.round(q),repeats)仅供参考,该代码是我正在编写的对图像进行最佳量化的程序的一部分。数字从原点的256色到结果中的4个灰度。我想自己把它作为一个训练练习来实现。这个修改可以运行吗?是的,它完全匹配。标记为“回答”谢谢我看到你的z现在不一样了。