本文實(shí)例講述了Python實(shí)現(xiàn)的拉格朗日插值法。分享給大家供大家參考,具體如下:
拉格朗日插值簡(jiǎn)單介紹
拉格朗日插值法是以法國(guó)十八世紀(jì)數(shù)學(xué)家約瑟夫·拉格朗日命名的一種多項(xiàng)式插值方法。
許多實(shí)際問(wèn)題中都用函數(shù)來(lái)表示某種內(nèi)在聯(lián)系或規(guī)律,而不少函數(shù)都只能通過(guò)實(shí)驗(yàn)和觀測(cè)來(lái)了解。在若干個(gè)不同的地方得到相應(yīng)的觀測(cè)值,拉格朗日插值法可以找到一個(gè)簡(jiǎn)單函數(shù),其恰好在各個(gè)現(xiàn)測(cè)的點(diǎn)取到觀測(cè)到的值,這個(gè)函數(shù)可以是代數(shù)多項(xiàng)式,三角多項(xiàng)式等。
完整Python示例:
# -*- coding:utf-8 -*-#拉格朗日插值代碼import pandas as pd #導(dǎo)入數(shù)據(jù)分析庫(kù)Pandasfrom scipy.interpolate import lagrange #導(dǎo)入拉格朗日插值函數(shù)inputfile = 'catering_sale.xls' #銷(xiāo)量數(shù)據(jù)路徑data = pd.read_excel(inputfile) #讀入數(shù)據(jù)data[u'銷(xiāo)量'][(data[u'銷(xiāo)量'] < 400) | (data[u'銷(xiāo)量'] > 5000)] = None #過(guò)濾異常值,將其變?yōu)榭罩?自定義列向量插值函數(shù)#s為列向量,n為被插值的位置,k為取前后的數(shù)據(jù)個(gè)數(shù),默認(rèn)為5def ployinterp_column(s, n, k=5): y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取數(shù) y = y[y.notnull()] #剔除空值 return lagrange(y.index, list(y))(n) #插值并返回插值結(jié)果#逐個(gè)元素判斷是否需要插值for i in data.columns: for j in range(len(data)): if data[i].isnull()[j]: #如果為空即插值。 data[i][j] = ployinterp_column(data[i], j)print(data)
運(yùn)行結(jié)果:
日期 銷(xiāo)量
0 2015-03-01 -291.400000
1 2015-02-28 2618.200000
2 2015-02-27 2608.400000
3 2015-02-26 2651.900000
4 2015-02-25 3442.100000
5 2015-02-24 3393.100000
6 2015-02-23 3136.600000
7 2015-02-22 3744.100000
8 2015-02-21 4275.254762
9 2015-02-20 4060.300000
10 2015-02-19 3614.700000
11 2015-02-18 3295.500000
12 2015-02-16 2332.100000
13 2015-02-15 2699.300000
14 2015-02-14 4156.860423
15 2015-02-13 3036.800000
16 2015-02-12 865.000000
17 2015-02-11 3014.300000
18 2015-02-10 2742.800000
19 2015-02-09 2173.500000
20 2015-02-08 3161.800000
21 2015-02-07 3023.800000
22 2015-02-06 2998.100000
23 2015-02-05 2805.900000
24 2015-02-04 2383.400000
25 2015-02-03 2620.200000
26 2015-02-02 2600.000000
27 2015-02-01 2358.600000
28 2015-01-31 2682.200000
新聞熱點(diǎn)
疑難解答
圖片精選