2014-02-13 34 views
0

给定一个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]

(I道歉,我数学是非常糟糕的,所以这些数字可能是错的)

数学精度不如速度或记忆考虑重要。

回答

0

代替更好的解决办法,这里是红宝石数学不准确的实现:

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