2014-02-13 35 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