将一组数字从旧范围转换为新范围,其中最低值是100,最高值是0?
假设我们有一个 [2, 5, 7, 9, 3] 值的数组,我希望 2 是 100,因为它是最低值,而 9 是 0,因为它是最高值,并且中间的所有内容都是插值的,我将如何转换这个数组?当我说插值时,我希望数字在新比例中相距相同的距离,因此 3 不会完全是 100,而是接近,可能在 95 左右。
回答
只需将数组缩放到[0, 100],然后将所有数组减去 100。因此,解决方案是:
import numpy as np
arr = [2, 5, 7, 9, 3]
min_val = np.min(arr)
max_val = np.max(arr)
total_range = max_val - min_val
new_arr = [(100 - int(((i - min_val)/total_range) * 100.0)) for i in arr]
请注意,如果您希望从最大值到最小值的指定范围内的所有值都均匀分布,则您的示例3不会发生。因此,在此解决方案中,3大约为 84(而不是 95)。