如何将数字数据点压缩为较小的集合?

时间:2014-02-13 13:25:15

标签: arrays charts

给定n个浮点数组,我想创建一个长度为m的新数组(其中n大于m),这样当在线图上绘制时,这两个图将重叠。

例如,给定以下数组和新长度8:

[0, 2, 4, 6, 8, 10, 12, 14, 14, 12, 10, 8, 6, 4, 2, 0]

结果可能是这样的:

[1.8, 5.6, 9.4, 13.8, 13.8, 9.4, 5.6, 1.8]

(我道歉,我的数学非常糟糕所以数字可能不对)

数学准确性不如速度或记忆考虑重要。

1 个答案:

答案 0 :(得分:0)

代替更好的解决方案,这是ruby中数学上不准确的实现:

def interpolate(series, new_size)
  raise "new_size must be smaller than series size" if series.count < new_size

  ratio = (new_size / series.count.to_f).round
  res = []
  new_size.times do |i|
    idx = (i * ratio).round
    res << (((ratio * (series[idx] || 0)) + ((1 - ratio) * (series[idx + 1] || 0)) / 2))
  end
  res
end