我正在尝试将一个数字范围转换为另一个数字范围,并保持比率。数学不是我的强项。
我有一个图像文件,其中点值的范围可能在-16000.00到16000.00之间,尽管典型范围可能会小得多。我想做的是将这些值压缩到0-100的整数范围内,其中0是最小点的值,而100是最大点的值。即使丢失了一些精度,它们之间的所有点也应保持相对比率,我想在python中做到这一点,但即使是通用算法也足够。我更喜欢可以调整最小/最大或任意一个范围的算法(即,第二个范围可以是-50到800,而不是0到100)。
NewValue = (((OldValue - OldMin) * (NewMax - NewMin)) / (OldMax - OldMin)) + NewMin
或者更具可读性:
OldRange = (OldMax - OldMin) NewRange = (NewMax - NewMin) NewValue = (((OldValue - OldMin) * NewRange) / OldRange) + NewMin
或者,如果您想保护旧范围为0( OldMin = OldMax )的情况,请执行以下 操作 :
OldRange = (OldMax - OldMin) if (OldRange == 0) NewValue = NewMin else { NewRange = (NewMax - NewMin) NewValue = (((OldValue - OldMin) * NewRange) / OldRange) + NewMin }
请注意,在这种情况下,我们被迫任意选择一个可能的新范围值。根据上下文,明智的选择可能是:NewMin( 见样本 ),NewMax或(NewMin + NewMax) / 2
NewMin
NewMax
(NewMin + NewMax) / 2