python

超轻量级php框架startmvc

Python实现的拉格朗日插值法示例

更新时间:2020-06-19 19:24:01 作者:startmvc
本文实例讲述了Python实现的拉格朗日插值法。分享给大家供大家参考,具体如下:拉格朗日

本文实例讲述了Python实现的拉格朗日插值法。分享给大家供大家参考,具体如下:

拉格朗日插值简单介绍

拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法。

许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解。在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个简单函数,其恰好在各个现测的点取到观测到的值,这个函数可以是代数多项式,三角多项式等。

完整Python示例:


# -*- coding:utf-8 -*-
#拉格朗日插值代码
import pandas as pd #导入数据分析库Pandas
from scipy.interpolate import lagrange #导入拉格朗日插值函数
inputfile = 'catering_sale.xls' #销量数据路径
data = pd.read_excel(inputfile) #读入数据
data[u'销量'][(data[u'销量'] < 400) | (data[u'销量'] > 5000)] = None #过滤异常值,将其变为空值
#自定义列向量插值函数
#s为列向量,n为被插值的位置,k为取前后的数据个数,默认为5
def ployinterp_column(s, n, k=5):
 y = s[list(range(n-k, n)) + list(range(n+1, n+1+k))] #取数
 y = y[y.notnull()] #剔除空值
 return lagrange(y.index, list(y))(n) #插值并返回插值结果
#逐个元素判断是否需要插值
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)

运行结果:

            日期           销量 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 29  2015-01-30  2766.800000 ..         ...          ... 171 2014-08-31  3494.700000 172 2014-08-30  3691.900000 173 2014-08-29  2929.500000 174 2014-08-28  2760.600000 175 2014-08-27  2593.700000 176 2014-08-26  2884.400000 177 2014-08-25  2591.300000 178 2014-08-24  3022.600000 179 2014-08-23  3052.100000 180 2014-08-22  2789.200000 181 2014-08-21  2909.800000 182 2014-08-20  2326.800000 183 2014-08-19  2453.100000 184 2014-08-18  2351.200000 185 2014-08-17  3279.100000 186 2014-08-16  3381.900000 187 2014-08-15  2988.100000 188 2014-08-14  2577.700000 189 2014-08-13  2332.300000 190 2014-08-12  2518.600000 191 2014-08-11  2697.500000 192 2014-08-10  3244.700000 193 2014-08-09  3346.700000 194 2014-08-08  2900.600000 195 2014-08-07  2759.100000 196 2014-08-06  2915.800000 197 2014-08-05  2618.100000 198 2014-08-04  2993.000000 199 2014-08-03  3436.400000 200 2014-08-02  2261.700000

[201 rows x 2 columns]

附:catering_sale.xls点击此处本站下载

Python 拉格朗日插值法