如何在Python实现线性插值?
线性插值是在已知两个相邻点的值时确定任何中间点的函数值的技术。线性插值基本上是对落在两个已知值内的未知值的估计。线性插值用于各种学科,如统计、经济学、价格确定等。它用于填补统计数据中的空白,以保证信息的连续性。
通过使用以下公式,我们可以对给定的数据点进行线性插值
这里(x1, y1)是第一个数据点的坐标。并且(x2,y2 ) 是第二个数据点的坐标,其中x是我们执行插值的点, y是插值值。
示例问题:
让我们举一个例子来更好地理解。我们有其中x表示数以下的数据值并且y是x的平方根的函数。我们的任务是找到5.5 (x) 的平方根。 x 1 2 3 4 5 6 y ( f(x) = √x ) 1 1.4142 1.7320 2 2.2360 2.4494
我们可以在这里使用线性插值方法。
1. 从 xie (5,2.2360) 和 (6,2.4494) 中找出两个相邻的 (x1, y1) ,(x2,y2) 。
Where x1 = 5, x2= 6, y1 = 2.2360, y2 = 2.4494, and we interpolate at point x = 5.5.
2. 使用公式 y(x) = y1 + (x – x1) \frac{(y2 – y1) }{ (x2 – x1)}
3. 将数值代入上述等式后。
y = 2.3427
在 x = 5.5 时,Y 的值为2.3427。因此,通过使用线性插值,我们可以轻松确定两个区间之间的函数值。
方法一:
使用公式
示例:假设我们有一个城市和年份的人口数据集。 X(Year) 2016 2017 2018 2019 2021 Y(Population) 10001 12345 74851 12124 5700
这里,X 是年份,Y 是任何城市的人口。我们的任务是在2020 年找到该城市的人口。
We choose our (x1, y1) ,(x2,y2) as x1=2019 , y1=12124, x2=2021, y2=5700, x = 2020, y = ?
这里 (x1, y1) 和 (x2, y2) 是两个相邻的点,x 是我们想要预测 y 总体值的年份。
Python3
# Python3 code
# Implementing Linear interpolation
# Creating Function to calculate the
# linear interpolation
def interpolation(d, x):
output = d[0][1] + (x - d[0][0]) * ((d[1][1] - d[0][1])/(d[1][0] - d[0][0]))
return output
# Driver Code
data=[[2019, 12124],[2021, 5700]]
year_x=2020
# Finding the interpolation
print("Population on year {} is".format(year_x),
interpolation(data, year_x))
Python3
# Implementation of Linear Interpolation using Python3 code
# Importing library
from scipy.interpolate import interp1d
X = [1,2,3,4,5] # random x values
Y = [11,2.2,3.5,-88,1] # random y values
# test value
interpolate_x = 2.5
# Finding the interpolation
y_interp = interp1d(X, Y)
print("Value of Y at x = {} is".format(interpolate_x),
y_interp(interpolate_x))
Population on year 2020 is 8912.0
方法二:
使用 scipy.interpolate.interp1d
同样,我们可以使用名为interpolate.interp1d的 scipy 库函数来实现线性插值。
Syntax : scipy.interpolate.interp1d(x, y, kind=’linear’, axis=- 1, copy=True, bounds_error=None, fill_value=nan, assume_sorted=False)
Sr. no. | Parameters | Description |
---|---|---|
1. | x | A 1-D array of real values. |
2. | y | A N-D array of real values. |
3. | kind | i.e. kind of interpolation do you want it can be ‘linear’, ‘nearest’, ‘nearest-up’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘previous’, or ‘next’. ‘zero’, ‘slinear’, ‘quadratic’ and ‘cubic’, by defaults it is linear. |
4. | axis | Specifies the axis of y along which which we interpolate. |
5. | copy | It holds boolean values if True, the class makes internal copies of x and y . |
6. | bounds_error | It holds boolean values If True, a ValueError is raised when interpolation is attempted on a value outside the range of x. |
例子:
Let’s have a random dataset :
X = [1,2,3,4,5], Y = [11,2.2,3.5,-88,1], and we want to find the value of Y at point 2.5.
蟒蛇3
# Implementation of Linear Interpolation using Python3 code
# Importing library
from scipy.interpolate import interp1d
X = [1,2,3,4,5] # random x values
Y = [11,2.2,3.5,-88,1] # random y values
# test value
interpolate_x = 2.5
# Finding the interpolation
y_interp = interp1d(X, Y)
print("Value of Y at x = {} is".format(interpolate_x),
y_interp(interpolate_x))
输出
Value of y at x = 2.5 is 2.85