我正在寻找有关如何在Python中将一个范围值转换为另一范围值的想法。我正在从事硬件项目,正在从可返回一定范围值的传感器读取数据,然后使用该数据来驱动需要不同范围值的执行器。
例如,假设传感器返回的值在1到512的范围内,并且执行器由5到10的值驱动。我想要一个函数,我可以传递一个值和两个范围并取回该值映射到第二个范围。如果这样的函数被命名,translate则可以这样使用:
translate
sensor_value = 256 actuator_value = translate(sensor_value, 1, 512, 5, 10)
在此示例中,我希望输出actuator_value为,7.5因为sensor_value处于可能的输入范围的中间。
actuator_value
7.5
sensor_value
一种解决方案是:
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)
您可能会使用代数来提高效率,但会降低可读性。