簡體   English   中英

在 JavaScript 中插入“缺失的年份”?

[英]Interpolating “missing years” in JavaScript?

前:

id   year  value
SE   1950  67
SE   1960  71
SE   1965  82
NO   1975  65
NO   1985  75

后:

data : {
    SE : {
        data : {
             1950 : 67,
             1951 : 67.4,
             1952 : 67.8,
             [...]
             1965 : 82
        },
        min_year : 1950,
        max_year : 1965

    }    
    NO : {
        data : {
             [...]
        },
        [...]   
    }    
} 

所以基本上,根據JS中的相鄰值填充間隙/插值的最有效方法是什么?

如果您只想要直線插值,則將n_0n_1作為您知道值的索引:

val[n] = val[n_0] + (n - n_0) * (val[n_1] - val[n_0]) / (n_1 - n_0);

例如,給定您的 SE 數據,1960 年的插值將是:

67.8 + (1960 - 1952) * (82 - 67.8) / (1965 - 1952)

即約76.5

JS 作為一門語言沒有工具可以直接幫助你。

您可以很容易地實現線性或多項式插值。 多項式(例如 3 次)可能會在中間提供更好的數字,盡管端點可能有問題 - 取決於數據。

線性插值更容易,盡管總的來說我認為它不會像更高次多項式插值那樣給出准確的估計。

另一種選擇可能是樣條曲線(三次曲線相對容易),這對於您的目的來說已經足夠准確了。 這可能有點矯枉過正,雖然可能不是 - 不確定這個要求的 scope。

您可能會考慮在服務器端執行此操作,並為實現這些插值函數的其他語言使用眾多庫之一。 這將為您提供一種非常准確且通用的方法來有效地解決問題,而無需自己實施。

很難說,因為准確度、數據范圍和項目的 scope 都會影響您需要哪種類型的插值,是否可以在服務器/客戶端進行等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM