python - 重新调整两个数值范围之间的值
python - rescale a value between two numerical ranges
我正在尝试将包含在两个整数范围内的值转换为包含在另一个给定范围内的另一个整数。我希望输出值是我的输入整数的对应值(根据比例)。更清楚地说,这是我要解决的问题的示例:
- 假设我有三个整数,比方说 10、28 和 13,它们都包含在 (10, 28) 范围内。 10 是最小可能值,28 是最大可能值。
- 我希望将整数转换为范围 (5, 20) 中的 'corresponding' 数字作为输出。在这个精确的示例中,10 将转换为 5,28 将转换为 20,将 13 转换为 5 到 20 之间的值,并重新缩放以保持比例不变。之后,这个值被转换为整数。
如何在 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]
我正在尝试将包含在两个整数范围内的值转换为包含在另一个给定范围内的另一个整数。我希望输出值是我的输入整数的对应值(根据比例)。更清楚地说,这是我要解决的问题的示例:
- 假设我有三个整数,比方说 10、28 和 13,它们都包含在 (10, 28) 范围内。 10 是最小可能值,28 是最大可能值。
- 我希望将整数转换为范围 (5, 20) 中的 'corresponding' 数字作为输出。在这个精确的示例中,10 将转换为 5,28 将转换为 20,将 13 转换为 5 到 20 之间的值,并重新缩放以保持比例不变。之后,这个值被转换为整数。
如何在 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]