python中插值函数 python scipy 插值( 二 )


import部分就不多说了 , 
这里首先定义了一系列节点,这里数据是随机的,
接下来 , 首先使用 linspace 为插值提供所需的x值,splrep 根据节点计算了样条曲线的参数,最后将其传递给 splev 计算插值后的结果 。
你可能是抱着想要用曲线连接节点的目的来看这篇文章 , 但看到这里还没搞懂插值法是个什么玩意,那么接下来的内容就是在讲数学中的插值法,与Python和Scipy已无关联 。
插值法 , 就是在给定的节点中作出合适的函数,使得这条曲线 经过每一个节点  , 这也就是为什么在数据可视化中使用插值而不是其他方法的原因,因为插值后仍然能够准确知道每一节点所对应的值 。
那么,是不是节点越多 , 插值的准确性就越高呢?
貌似是这样,毕竟节点越多,对曲线的限制条件就越多 , 那准确性不久越高了 。
但是呢 , 如果你使用多节点直接插值(不是在程序中插值,因为程序会使用分段样条插值) , 你就会发现,曲线在两段有明显的震荡,并且节点越多 , 震荡越明显、越大:
这种现象被称为 Tolmé Runge 现象( 龙格现象 ) , 描述的就是这一问题 。对此的数学证明在知乎上有,传送门。
通过龙格现象,我们会发现,当节点数量趋向于无穷时,插值的误差会趋向于无穷大:
那么,如何避免这一情况呢 , 可以把我们原先的等距节点替换成Chebyshev节点,但是如果我们的离散数据确实等距,这一方法不好用,那么就可以才用分段插值,我们的程序对龙格现象也是这样处理的 。
分段插值就是将高次多项式拆分成多个低次多项式 , 一般都拆分成三次多项式 。
由于插值和拟合常常一起出现,所以这里也简单提一下拟合 。
拟合是对你给出的离散数据,作出于数据 差距最小 的函数,另外,按照拟合的结果,拟合也分线性拟合和非线性拟合 。
拟合与插值的差别就在于,插值必须过节点,但是拟合不需要,所以拟合曲线的整体效果会更好,也就是更平滑 。
拟合一般都用在数据分析里,因为拟合曲线更能够看出整体的变化趋势嘛 。
这篇文章写起来难度还是想当大,如果我的描述有问题的话 , 欢迎评论区留言 。
前往我的博客查看本文
python怎样对矩阵进行插值?首先需要创建数组才能对其进行其它操作 。
我们可以通过给array函数传递Python的序列对象创建数组,如果传递的是多层嵌套的序列 , 将创建多维数组(下例中的变量c):
a = np.array([1, 2, 3, 4])
b = np.array((5, 6, 7, 8))
c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
b
array([5, 6, 7, 8])
c
array([[1, 2, 3, 4],
[4, 5, 6, 7],
[7, 8, 9, 10]])
c.dtype
dtype('int32')
数组的大小可以通过其shape属性获得:
a.shape
(4,)
c.shape
双线性插值法原理 python实现码字不易,如果此文对你有所帮助,请帮忙点赞,感谢!
一. 双线性插值法原理:
① 何为线性插值?
插值就是在两个数之间插入一个数,线性插值原理图如下:
② 各种插值法:
插值法的第一步都是相同的,计算目标图(dstImage)的坐标点对应原图(srcImage)中哪个坐标点来填充,计算公式为:
srcX = dstX * (srcWidth/dstWidth)
srcY = dstY * (srcHeight/dstHeight)
(dstX,dstY)表示目标图像的某个坐标点,(srcX,srcY)表示与之对应的原图像的坐标点 。srcWidth/dstWidth 和 srcHeight/dstHeight 分别表示宽和高的放缩比 。

推荐阅读