将一组数字从旧范围转换为新范围,其中最低值是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)。


以上是将一组数字从旧范围转换为新范围,其中最低值是100,最高值是0?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>