在 Ruby 中,给定以下数组
[-10, 5, 22, 54, 89, 152]
我将如何获得如下结果,其中最小值为 0,最大值为 100。(此结果是一个猜测,而不是数字应该是什么样子的实际反射(reflect))
[0, 8, 24, 53, 85, 100]
注意:中间的数字也会缩放以适合。
最佳答案
这里有一个简单的方法:
def normalize(list, scale = 100)
return unless (list.length >= 2)
min, max = list.minmax
range = max - min
list.map do |v|
((v - min) * scale / range)
end
end
这不会产生与您预期相同的结果,但我无法确定为什么您会期待这些结果,因为线性缩放值不会给出这些值。下面是一些测试:
list = [-10, 5, 22, 54, 89, 152]
normalize(list)
# => [0, 9, 19, 39, 61, 100]
# Running it again changes nothing
normalize(normalize(list))
# => [0, 9, 19, 39, 61, 100]
list = [-1,0,1]
normalize(list)
# => [0, 50, 100]
关于ruby-on-rails - 将数组缩放到最小值/最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45969471/