python - 重新调整两个数值范围之间的值

python - rescale a value between two numerical ranges

我正在尝试将包含在两个整数范围内的值转换为包含在另一个给定范围内的另一个整数。我希望输出值是我的输入整数的对应值(根据比例)。更清楚地说,这是我要解决的问题的示例:

如何在 python 中实现这样的 'rescaling'?我尝试了通常的计算 (value/max of first range)*max of second range 但它给出了错误的值,除非在极少数情况下。

起初我在python中用int做除法有问题,但改正后,我的值仍然错误。例如,使用示例中给出的值,int((float(10)/28)*20) 将给我 7 作为结果,它应该 return 5 因为它是第一个范围内的最小可能值。

我觉得它有点明显(在逻辑和数学方面),我遗漏了一些东西。

如果您得到错误的结果,您可能使用了 Python2 - 除法总是产生一个整数 - (因此您会得到很多舍入错误和 "zeros" 当涉及到比例因子。

Python3 更正了这一点,以便分区 return 浮动 - 在 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]