📜  如何在Python实现线性插值?

📅  最后修改于: 2022-05-13 01:55:51.784000             🧑  作者: Mango

如何在Python实现线性插值?

线性插值是在已知两个相邻点的值时确定任何中间点的函数值的技术。线性插值基本上是对落在两个已知值内的未知值的估计。线性插值用于各种学科,如统计、经济学、价格确定等。它用于填补统计数据中的空白,以保证信息的连续性。

通过使用以下公式,我们可以对给定的数据点进行线性插值

Linear Interpolation : y(x)  =  y1  +  (x - x1)  \frac{(y2 - y1) }{ (x2 - x1)}

这里(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) 。

2. 使用公式 y(x) = y1 + (x – x1) \frac{(y2 – y1) }{ (x2 – x1)} y(x)  =  y1  +  (x - x1)  \frac{(y2 - y1) }{ (x2 - x1)}

3. 将数值代入上述等式后。

y = 2.2360+(5.5-5)\frac{(2.4494-2.2360)}{(6 - 5)} y = 2.3427

在 x = 5.5 时,Y 的值为2.3427。因此,通过使用线性插值,我们可以轻松确定两个区间之间的函数值。

方法一:

使用公式Linear Interpolation : y(x)  =  y1  +  (x - x1)  \frac{(y2 - y1) }{ (x2 - x1)}

示例:假设我们有一个城市和年份的人口数据集。

X(Year)

2016

2017

2018

2019

2021

Y(Population)

10001

12345

74851

12124

5700

这里,X 是年份,Y 是任何城市的人口。我们的任务是在2020 年找到该城市的人口

这里 (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 库函数来实现线性插值。

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.

例子:

蟒蛇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