一尘不染

将一系列值映射到另一个

python

我正在寻找有关如何在Python中将一个范围值转换为另一范围值的想法。我正在从事硬件项目,正在从可返回一定范围值的传感器读取数据,然后使用该数据来驱动需要不同范围值的执行器。

例如,假设传感器返回的值在1到512的范围内,并且执行器由5到10的值驱动。我想要一个函数,我可以传递一个值和两个范围并取回该值映射到第二个范围。如果这样的函数被命名,translate则可以这样使用:

sensor_value = 256
actuator_value = translate(sensor_value, 1, 512, 5, 10)

在此示例中,我希望输出actuator_value为,7.5因为sensor_value处于可能的输入范围的中间。


阅读 126

收藏
2020-12-20

共1个答案

一尘不染

一种解决方案是:

def translate(value, leftMin, leftMax, rightMin, rightMax):
    # Figure out how 'wide' each range is
    leftSpan = leftMax - leftMin
    rightSpan = rightMax - rightMin

    # Convert the left range into a 0-1 range (float)
    valueScaled = float(value - leftMin) / float(leftSpan)

    # Convert the 0-1 range into a value in the right range.
    return rightMin + (valueScaled * rightSpan)

您可能会使用代数来提高效率,但会降低可读性。

2020-12-20