我正在尝试将包含在两个整数范围内的值转换为另一个给定范围中包含的另一个整数。我希望输出值是我的输入整数的相应值(相对于比例)。更清楚的是,这是我想要解决的问题的一个例子:
如何实现这样的'重新缩放'在python?我尝试了通常的计算(value/max of first range)*max of second range
但它提供了错误的值,除非在极少数情况下。
起初我在python中使用int
进行除法时遇到了问题,但在纠正之后,我仍然有错误的值。例如,使用示例中给出的值,int((float(10)/28)*20)
将给出7作为结果,它应返回5,因为它是第一个范围中的最小可能值。
我觉得它有点明显(在逻辑和数学方面)我错过了一些东西。
答案 0 :(得分:5)
如果你得到错误的结果,你可能会使用Python2 - 其中除法总是产生一个整数 - (因此,当涉及缩放因子时,你会得到很多舍入错误和“零”。
Python3纠正了这一点,以便分区返回浮点数 - 在Python2中,解决方法是将from __future__ import division
放在代码的第一行(首选),或者将至少一个除法操作数显式转换为浮点数 - 关于每个部门。
from __future__ import division
def renormalize(n, range1, range2):
delta1 = range1[1] - range1[0]
delta2 = range2[1] - range2[0]
return (delta2 * (n - range1[0]) / delta1) + range2[0]