python实现线性插值
admin
2024-03-19 19:28:12
0

线性插值

插值:是根据已知的数据序列(可以理解为你坐标中一系列离散的点),找到其中的规律,然后根据找到的这个规律,来对其中尚未有数据记录的点进行数值估计。
线性插值:是针对一维数据的插值方法。它根据一维数据序列中需要插值的点的左右临近两个数据来进行数值估计。当然了它不是求这两个点数据大小的平均值(在中心点的时候就等于平均值)。而是根据到这两个点的距离来分配比重的。

python实现线性插值

numpy.interp

numpy.interp(x, xp, fp, left=None, right=None, period=None)

参数:

  • x:类似数组,要插值点的横坐标
  • xp:一维浮点数序列,如果未指定参数周期,则数据点的x坐标必须增加 . 否则,在用归一化周期边界之后对xp进行内部排序,xp = xp % period。
  • fp:一维浮点数或复数序列,数据点的y坐标,与xp的长度相同。
  • left:可选择参数。x
  • right:可选择参数。x> xp [-1]的返回值,默认值为fp [-1]。
  • period:设定横坐标的周期,该选项打开时,则忽略left和right。

示例:

import numpy as np 
import matplotlib.pyplot as pltxp = [1, 2, 3]
fp = [3, 2, 0]
y = np.interp(2.5, xp, fp)
#1.0y = np.interp([0, 1, 1.5, 2.72, 3.14], xp, fp)
#array([3.  , 3.  , 2.5 , 0.56, 0.  ])UNDEF = -99.0
y = np.interp(3.14, xp, fp, right=UNDEF)
#-99.0#sine 函数插值
x = np.linspace(0, 2*np.pi, 10)
y = np.sin(x)
xvals = np.linspace(0, 2*np.pi, 50)
yinterp = np.interp(xvals, x, y)plt.plot(x, y, 'o')
plt.plot(xvals, yinterp, '-x')
plt.show()#周期 x 坐标的插值
x = [-180, -170, -185, 185, -10, -5, 0, 365]
xp = [190, -190, 350, -350]
fp = [5, 10, 3, 4]
y = np.interp(x, xp, fp, period=360)
#array([7.5 , 5.  , 8.75, 6.25, 3.  , 3.25, 3.5 , 3.75])#复数插值Complex interpolation:
x = [1.5, 4.0]
xp = [2,3,5]
fp = [1.0j, 0, 2+3j]
y = np.interp(x, xp, fp)
#array([0.+1.j , 1.+1.5j])

示例:已知y坐标,求x点。

import numpy as npy = np.array([0, 38.39, 71.41, 99.66, 123.67, 143.88, 160.61, 174.03, 184.16, 190.8, 193.52])
x = np.array([0, 0.37, 0.74, 1.11, 1.48, 1.85, 2.22, 2.59, 2.96, 3.33, 3.7])
plt.plot(x, y, '-')y_val = 30
root = np.interp(y_val, y, x)
print(root)

scipy.interpolate.interp1d

scipy.interpolate.interp1d(x, y, kind='linear', axis=- 1, copy=True, bounds_error=None, fill_value=nan, assume_sorted=False)

参数:

  • x:数值数组。一般是升序排列的x数据点。
  • y:数值数组。与x数据点对应的y坐标,插值维的长度必须与x长度相同。
  • kind:字符串或整数,给出插值的样条曲线的阶数,线性插值用’linear’。‘linear’, ‘nearest’, ‘nearest-up’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘previous’, or ‘next’. ‘zero’, ‘slinear’, ‘quadratic’ ,‘cubic’。
  • axis:int
  • copy:bool
  • bounds_error:布尔值,越界是否报错,除非fill_value=‘extrapolate’,否则默认越界时报错。
  • fill_value:数组或’extrapolate’,指定不在x范围内时的填充值或填充方法. 当为’extrapolate’时,返回的函数会对落在x范围外的值进行外插。
  • assume_sorted:bool

示例:

x = data['时间']
y = data['浓度']
# 构建完整的时间序列 = [1,23,...23]
xnew = np.linspace(1,23,num=23)# 线性插值
f1 = interp1d(x,y,kind='linear')
ynew1 = f1(xnew)
plt.scatter(x,y,zorder=3)
plt.plot(xnew,ynew1,marker='s',ls='--',c='C1')
plt.legend(['data','线性插值'])
plt.xticks(range(0,24,1))
plt.grid(ls='--',alpha=0.5)
plt.xlabel('A')
plt.ylabel('B')
plt.tight_layout()
plt.show()

示例:

from scipy.interpolate import interp1dx = [1, 2, 3]
y = [3, 2, 0]
f = interp1d(x,y,fill_value=(3,0),bounds_error=False) # 线性内插
out = f([0, 1, 1.5, 2.72, 3.14])
print(out)
#array([3. , 3. , 2.5 , 0.56, 0. ])fe = interp1d(x,y, fill_value='extrapolate') # 线性内插+外插
out = fe([0, 1, 1.5, 2.72, 3.14])
print(out)
#array([ 4. , 3. , 2.5 , 0.56, -0.28])

相关内容

热门资讯

西北娃贝贝:黄花菜增强免疫力食... 很多家长都困扰: “娃一到换季就感冒。” “吃饭不香,抵抗力差。” 孩子抵抗力差,跟饮食结构关系密切...
2025秋季房车游阿勒泰A线 ... 活动费用 一团一车,天天发团,港澳台外籍可报名,司机兼房车管家 优惠团期:8月20日-9月24日团期...
首次出游张家界:这份张家界五天... 第一天:抵达张家界,初探天门山 清晨,我从上海虹桥机场搭乘早班机前往张家界荷花机场,经过两个多小时的...
【人民日报客户端】云南云县:一... 7月31日 人民日报客户端刊发文章 《云南云县:一树咖啡“点绿成金”》 关注云县咖啡产业 ↓↓↓ ...
原创 湖... 当玉米面遇上古法发酵的狂野 在宜昌的灶台边流传着这样的智慧:将新鲜红辣椒剁碎,拌入金黄玉米面,封坛...
天山为幕,雪峰为卷——天山户外... 7 月26日,为期1个月的“天山为幕·自然共生”2025中国天山国际户外生活季、新疆户外运动大赛·天...
我家祖传炒面秘诀!伏天就靠这锅... “滋啦——”滚油爆香蒜末的瞬间,客厅里打游戏的儿子像装了弹簧,“嗖”地弹进厨房:“妈!今天炒面放腊肠...
郑州方中山胡辣汤:辣到流泪,配... 在河南早餐的丰富版图中,方中山胡辣汤占据着极为重要的地位,堪称 “硬核担当”。本文将深入探寻郑州方中...
冬天的第一碗:河南烩面,羊肉汤... 本文围绕冬天里的河南烩面展开,先是介绍了河南烩面作为冬日暖心美食的独特地位,点明其以羊肉汤为底、搭配...
“AI豚宝”亮相汉亮,探索长江... “在湖北避暑的绝佳去处有哪些?”当汉口的留学生们提出这个问题时,“AI豚宝”迅速展开回应,用流利的英...
原创 餐... 哪怕只有一个人吃饭,也要做到精致得体,美食、不仅仅是为了果腹,更是对生活的一种品味和追求,用心去过好...
2025年海南国际旅游岛欢乐节... 海南国际旅游岛欢乐节 第二十六届 盛夏八月,盛情海南欢乐启航!8月2日晚,2025年(第二十...
柬泰边境冲突期间,柬埔寨一退役... 柬埔寨和泰国的边境冲突随着两国达成停火协议而告一段落。在此期间,一名柬埔寨退役老兵在排水管里躲藏了6...
奇怪!内地奶茶巨头生意火爆却突... 近日,一则消息在社交平台上炸开了锅—— 中环兰桂坊附近的喜茶分店,竟「静悄悄」地消失了。 喜茶攻港失...