ruby-on-rails - 将数组缩放到最小值/最大值

标签 ruby-on-rails ruby

在 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/

相关文章:

ruby - block 缩进正则表达式

ruby-on-rails - 使用 ActiveRecord 在 Rails 中测试具有多个数据库连接的模型

ruby-on-rails - 如何在 Rails 中使用 x-www-form-urlencoded

ruby - 在Gemfile.lock中管理冲突的依赖项

ruby-on-rails - 如何在 Rails 中构建 View 对象以供 JavaScript 使用

ruby - 用 ruby​​ 进行时间序列重采样

sql - rails : submitting a form with multiple objects

ruby-on-rails - 将参数值传递给 redirect_to 作为 rails 中的查询字符串

html - 将 CSS 类添加到 mail_to ruby​​ on rails helper

ruby-on-rails - 我将如何向 Rails 应用程序添加一个简单的菜单? (如何使用yield :menu)