053、插值模块
本文最后更新于 67 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

插值模块

scipy.interpolate是SciPy中负责插值操作的子模块:

from scipy import interpolate
import numpy as np

插值(Interpolation)是通过已知的离散数据点求未知数据的过程或方法。例如,考虑这样一组离散数据点:

x = np.linspace(0, 2*np.pi, 10)
y = np.sin(x)
from matplotlib import pyplot as plt 
plt.plot(x, y, "o")
[]


png

这些数据点x的维度为1,因此是个一维插值问题。一维插值问题对应的函数为interpolate.interp1d()

f = interpolate.interp1d(x, y)

返回值f可以像函数一样被调用。当输入值为数字时,f返回一个NumPy数组:

f(0)
array(0.)
f([np.pi / 6, np.pi / 2])
array([0.48209071, 0.95511217])

默认情况下,插值函数允许的定义域范围由输入数据的范围决定。对于超出范围的数据,调用f会抛出异常。在上面的例子中,x的范围为0到2倍圆周率,因此输入负数会报错。

可以通过在调用插值函数时,加入bounds_error参数来允许超出范围的输入:

f = interpolate.interp1d(x, y, bounds_error=False)
f(-np.pi)
array(nan)

还可以加入fill_value参数指定超出范围的默认返回值:

f = interpolate.interp1d(x, y, bounds_error=False, fill_value=-100)
f(-np.pi)
array(-100.)

线性插值对应的函数如图8-2所示:

t = np.linspace(0, 2 * np.pi, 200)

f = interpolate.interp1d(x, y)
plt.plot(x, y, 'o', t, f(t))
plt.show()


png

可以通过加入kind参数,实现不同的插值方法。

  • 'nearest':最近邻插值,x对应的值为离x最近的点对应的值。
  • 'zero':零阶插值,使用一个常数分段函数进行插值。
  • 'linear':线性插值,默认插值方法。
  • 'quadratic':二次函数插值。
  • 'cubic':三次函数插值。
  • 数字4,5,6,7:更高次数的函数插值。

例如最近邻:

t = np.linspace(0, 2 * np.pi, 200)

f = interpolate.interp1d(x, y, kind="nearest")
plt.plot(x, y, 'o', t, f(t))
plt.show()


png

三次插值:

t = np.linspace(0, 2 * np.pi, 200)

f = interpolate.interp1d(x, y, kind="cubic")
plt.plot(x, y, 'o', t, f(t))
plt.show()


png

谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇