国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Python數(shù)據(jù)插值】

這篇具有很好參考價(jià)值的文章主要介紹了【Python數(shù)據(jù)插值】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 數(shù)據(jù)插值


插值是一種從離散數(shù)據(jù)點(diǎn)構(gòu)建函數(shù)的數(shù)學(xué)方法。插值函數(shù)或者插值方法應(yīng)該與給定的數(shù)據(jù)點(diǎn)完全一致。插值可能的應(yīng)用場景:

  1. 根據(jù)給定的數(shù)據(jù)集繪制平滑的曲線
  2. 對(duì)計(jì)算量很大的復(fù)雜函數(shù)進(jìn)行近似求值

插值和前面介紹過的最小二乘擬合有些類似。在最小二乘擬合中,我們感興趣的是使用數(shù)據(jù)點(diǎn)和超定方程組,將函數(shù)擬合到數(shù)組點(diǎn),使得誤差平方和最小。在插值中,我們需要一個(gè)方程能夠與已有的數(shù)據(jù)點(diǎn)完全重合,僅使用與插值函數(shù)自由參數(shù)個(gè)數(shù)相同的數(shù)據(jù)點(diǎn)。因此,最小二乘法適合將大量數(shù)據(jù)點(diǎn)擬合到模型函數(shù),插值是根據(jù)少量數(shù)據(jù)點(diǎn)創(chuàng)建函數(shù)。

外插(extrapolation)是與插值(interpolation)相關(guān)的一個(gè)概念。外插是在采樣范圍之外計(jì)算函數(shù)的估計(jì)值。我們這里只介紹插值。

2. 導(dǎo)入模塊


本部分我們將使用NumPy中的polynomial模塊和SciPy的interpolation模塊。

import numpy as np
from scipy import linalg
import matplotlib.pyplot as plt

from numpy import polynomial as P
from scipy import interpolate
%reload_ext version_information
%version_information numpy, matplotlib, scipy

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)

3. 插值函數(shù)


為了簡潔起見,我們這里只考慮一維插值問題。對(duì)于給定的數(shù)據(jù)點(diǎn)的集合 { ( x i , y i ) } i = 1 n \left\{ (x_i, y_i) \right \}_{i=1}^n {(xi?,yi?)}i=1n?,找到插值函數(shù) f ( x i ) = y i f(x_i)=y_i f(xi?)=yi?。插值函數(shù)的選擇并不是唯一的,事實(shí)上有無數(shù)函數(shù)滿足插值標(biāo)準(zhǔn)。通??梢园巡逯岛瘮?shù)寫為一組基函數(shù) ? ( x ) \phi(x) ?(x)的線性組合,即 f ( x ) = ∑ j = 1 n c j ? j ( x ) f(x)=\sum\limits_{j=1}^n c_j \phi_j(x) f(x)=j=1n?cj??j?(x),其中 c j c_j cj?是未知系數(shù)。將給定的數(shù)據(jù)點(diǎn)代入線性組合,可以得到未知系數(shù)的線性方程組:

[ ? 1 ( x 1 ) ? 2 ( x 1 ) ? ? n ( x 1 ) ? 1 ( x 2 ) ? 2 ( x 2 ) ? ? n ( x 2 ) ? ? ? ? ? 1 ( x n ) ? 2 ( x n ) ? ? n ( x n ) ] [ c 1 c 2 ? c n ] [ y 1 y 2 ? y n ] \begin{bmatrix} \phi_1(x_1) & \phi_2(x_1) & \cdots & \phi_n(x_1) \\ \phi_1(x_2) & \phi_2(x_2) & \cdots & \phi_n(x_2) \\ \vdots & \vdots & \ddots & \vdots \\ \phi_1(x_n) & \phi_2(x_n) & \cdots & \phi_n(x_n) \end{bmatrix} \begin{bmatrix}c_1 \\ c_2 \\ \vdots \\ c_n\end{bmatrix} \begin{bmatrix}y_1 \\ y_2 \\ \vdots \\ y_n\end{bmatrix} ???????1?(x1?)?1?(x2?)??1?(xn?)??2?(x1?)?2?(x2?)??2?(xn?)???????n?(x1?)?n?(x2?)??n?(xn?)?????????????c1?c2??cn??????????????y1?y2??yn????????

這里基函數(shù)的數(shù)量與數(shù)據(jù)點(diǎn)的數(shù)量想用,可以使用求解方程組的標(biāo)準(zhǔn)方法得到系數(shù)向 c c c的唯一解。如果基函數(shù)的數(shù)量小于數(shù)據(jù)點(diǎn)的數(shù)量,該方程組是超定的,可能需要使用最小二乘擬合進(jìn)行近似插值。

3.1 多項(xiàng)式


NumPy庫包含的polynominal模塊提供了處理多項(xiàng)式的函數(shù)和類。要?jiǎng)?chuàng)建Polynominal類的實(shí)例,可以將系數(shù)數(shù)組傳給該類的構(gòu)造函數(shù)。

p1 = P.Polynomial([1,2,3])
p1

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
也可以使用Polynomial.fromroots方法,通過指定多項(xiàng)式的根來初始化多項(xiàng)式。

p2 = P.Polynomial.fromroots([-1, 1])
p2

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
我們可以通過實(shí)例的方法訪問其特性:

p1.roots() # 根

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
p1.coef # 系數(shù)
python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
Polynomial實(shí)例包括domain和windows兩個(gè)參數(shù),可以用于把多項(xiàng)式的輸入域映射到另外一個(gè)區(qū)間。

p1.domain

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)

p1.window

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
多項(xiàng)式在用Polynomial實(shí)例表示后可以很容易計(jì)算任何 x x x的多項(xiàng)式值。

p1(np.array([1.5, 2.5, 3.5]))

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
Polynomial實(shí)例支持標(biāo)準(zhǔn)的算術(shù)運(yùn)算符。

p1 + p2

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
分解因式

p3 = P.Polynomial([1,1])  # 等價(jià)于 P.Polynomial.fromroots(-1)
p2 // p3

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)

P.Polynomial.fromroots(-1)

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
除了標(biāo)準(zhǔn)冪基多項(xiàng)式的Polynomial類,polynomial模塊還提供了切比雪夫多項(xiàng)式、勒讓德多項(xiàng)式、拉蓋爾多項(xiàng)式、埃爾米特多項(xiàng)式的類。

l1 = P.Legendre([1,2,3])  # 勒讓德多項(xiàng)式
l1

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)

l1.roots()

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)

3.2 多項(xiàng)式插值


求解多項(xiàng)式插值問題,首先需要根據(jù)提供的基函數(shù)計(jì)算矩陣 ? ( x ) \phi(x) ?(x),然后求解得到的線性方程組。polynomial模塊中的每個(gè)多項(xiàng)式類都提供了方便的函數(shù)來計(jì)算相應(yīng)基的范德蒙矩陣。

例如,假設(shè)存在數(shù)據(jù)點(diǎn)(1, 1)、(2, 3)、(3, 5)、(4, 4)。

x = np.array([1, 2, 3, 4])
y = np.array([1, 3, 5, 4])
deg = len(x) - 1
A = P.polynomial.polyvander(x, deg)  # 范德蒙矩陣
A

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)

c = linalg.solve(A, y)
c

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
找到的插值多項(xiàng)式是 f ( x ) = 2 ? 3.5 x + 3 x 2 ? 0.5 x 3 f(x) = 2 - 3.5x + 3x^2 - 0.5 x^3 f(x)=2?3.5x+3x2?0.5x3。

f1 = P.Polynomial(c)
f1(2.5)

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
下面,我們使用切比雪夫多項(xiàng)式重新對(duì)數(shù)據(jù)進(jìn)行插值。

A = P.chebyshev.chebvander(x, deg)
A

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)

c = linalg.solve(A, y)
c

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)

f2 = P.Chebyshev(c)
f2(2.5)

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
將函數(shù) f 1 f1 f1 f 2 f2 f2進(jìn)行對(duì)比,驗(yàn)證不同基函數(shù)進(jìn)行插值,得到了一致的插值函數(shù)。

xx = np.linspace(x.min(), x.max(), 100)

fig, ax = plt.subplots(1, 1, figsize=(8, 4))

ax.plot(xx, f1(xx), 'b', lw=2, label='Power basis interp.')
ax.plot(xx, f2(xx), 'r--', lw=2, label='Chebyshev basis interp.')
ax.scatter(x, y, label='data points')

ax.legend(loc=4)
ax.set_xticks(x)
ax.set_ylabel(r"$y$", fontsize=18)
ax.set_xlabel(r"$x$", fontsize=18)

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
polynomial模塊還提供了更快捷的方法計(jì)算插值多項(xiàng)式。每個(gè)多項(xiàng)式類都有fit方法用于計(jì)算插值,deg參數(shù)用于控制多項(xiàng)式的次數(shù)。如果多項(xiàng)式的次數(shù)少于數(shù)據(jù)點(diǎn)的數(shù)目減1,fit方法會(huì)使用最小二乘擬合而不是精確插值。

f1b = P.Polynomial.fit(x, y, deg)
f1b

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)

f2b = P.Chebyshev.fit(x, y, deg)
f2b

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
注意在使用fit方法時(shí),實(shí)例中的domain屬性會(huì)自動(dòng)設(shè)置為數(shù)據(jù)點(diǎn)中相應(yīng)的x值,上述示例中為[1, 4],并相應(yīng)調(diào)整系數(shù)。將插值數(shù)據(jù)映射到某個(gè)基函數(shù)最合適的范圍,可以明顯提高插值的數(shù)值穩(wěn)定性,減小范德蒙矩陣的條件數(shù)。

np.linalg.cond(P.chebyshev.chebvander(x, deg))

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)

np.linalg.cond(P.chebyshev.chebvander((2*x-5)/3.0, deg))

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
當(dāng)數(shù)據(jù)點(diǎn)的數(shù)量增加時(shí),需要使用次數(shù)更多的多項(xiàng)式才能得到精確的插值。這會(huì)帶來多方面問題:

  1. 次數(shù)更多的多項(xiàng)式插值計(jì)算和插值函數(shù)的確定,計(jì)算量很大。
  2. 高次多項(xiàng)式插值可能會(huì)在插值點(diǎn)之間帶來不可預(yù)料的行為,插值函數(shù)在數(shù)據(jù)點(diǎn)之間可能變化很大。
    下面我們將使用龍格函數(shù)演示這種行為:
def runge(x):
    return 1/(1 + 25 * x**2)

def runge_interpolate(n):
    x = np.linspace(-1, 1, n+1)
    p = P.Polynomial.fit(x, runge(x), deg=n)
    return x, p

xx = np.linspace(-1, 1, 250)

fig, ax = plt.subplots(1, 1, figsize=(8, 4))

ax.plot(xx, runge(xx), 'k', lw=2, label="Runge's function")

n = 13
x, p = runge_interpolate(n)
ax.plot(x, runge(x), 'ro')
ax.plot(xx, p(xx), 'r', label='interp. order %d' % n)

n = 14
x, p = runge_interpolate(n)
ax.plot(x, runge(x), 'go')
ax.plot(xx, p(xx), 'g', label='interp. order %d' % n)

ax.legend(loc=8)
ax.set_xlim(-1.1, 1.1)
ax.set_ylim(-1, 2)
ax.set_xticks([-1, -0.5, 0, 0.5, 1])
ax.set_ylabel(r"$y$", fontsize=18)
ax.set_xlabel(r"$x$", fontsize=18)

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
可以看到,高階插值函數(shù)在遠(yuǎn)端采樣點(diǎn)之間急劇震蕩。這種不良特性違背了插值的初衷。一個(gè)可行的解決方法是,當(dāng)面對(duì)大量數(shù)據(jù)點(diǎn)時(shí),使用分段低次多項(xiàng)式進(jìn)行插值。

3.3 樣條插值


對(duì)于包含 n n n個(gè)數(shù)據(jù)點(diǎn)的集合,在整個(gè)數(shù)據(jù)區(qū)間上有 n ? 1 n-1 n?1個(gè)子區(qū)間。連接兩個(gè)子區(qū)間的數(shù)據(jù)點(diǎn)在分段多項(xiàng)式插值中被稱為節(jié)點(diǎn)。在每個(gè)子區(qū)間上使用 k k k次多項(xiàng)式對(duì) n n n個(gè)數(shù)據(jù)點(diǎn)進(jìn)行插值,需要確定 ( k + 1 ) ( n ? 1 ) (k+1)(n-1) (k+1)(n?1)個(gè)參數(shù)。所有節(jié)點(diǎn)的值可以給出 2 ( n ? 1 ) 2(n-1) 2(n?1)個(gè)方程。為了保證分段多項(xiàng)式的平滑,節(jié)點(diǎn)處導(dǎo)數(shù)和高階導(dǎo)數(shù)的連續(xù)性也會(huì)給出相應(yīng)方程。

樣條是一種特殊類型的分段式插值函數(shù)。最常用的是三次樣條, k = 3 k=3 k=3,需要 4 ( n ? 1 ) 4(n-1) 4(n?1)個(gè)參數(shù)。在 n ? 2 n-2 n?2個(gè)節(jié)點(diǎn)處,一階和二階導(dǎo)數(shù)的連續(xù)性可以給出 2 ( n ? 1 ) 2(n-1) 2(n?1)個(gè)方程,總方程的數(shù)目為 4 ( n ? 1 ) ? 2 4(n-1)-2 4(n?1)?2。此時(shí)還剩下兩個(gè)未確定的參數(shù)。一種常見的方法是要求端點(diǎn)處的二階導(dǎo)數(shù)為0,這被稱為自然樣條。

SciPy的interpolate模塊提供了用于樣條插值的多個(gè)函數(shù)和類。下面我們將再次使用龍格函數(shù),演示使用interpolate.interp1d函數(shù)。這里設(shè)置kind=3來計(jì)算三次樣條。

x = np.linspace(-1, 1, 11)
y = runge(x)
f = interpolate.interp1d(x, y, kind=3)
f(0.05)

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)

xx = np.linspace(-1, 1, 100)
fig, ax = plt.subplots(figsize=(8, 4))

ax.plot(xx, runge(xx), 'k', lw=1, label="Runge's function")
ax.plot(x, y, 'ro', label='sample points')
ax.plot(xx, f(xx), 'r--', lw=2, label='spline order 3')

ax.legend()
ax.set_ylim(0, 1.1)
ax.set_xticks([-1, -0.5, 0, 0.5, 1])
ax.set_ylabel(r"$y$", fontsize=18)
ax.set_xlabel(r"$x$", fontsize=18)

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
這里使用了11個(gè)數(shù)據(jù)點(diǎn)和三次樣條,可以看到插值很好地與原始函數(shù)吻合。
為了說明階數(shù)對(duì)樣條插值的影響,我們下面準(zhǔn)備了8個(gè)數(shù)據(jù)點(diǎn)使用不同階數(shù)的樣條進(jìn)行插值。

x = np.array([0, 1, 2, 3, 4, 5, 6, 7])
y = np.array([3, 4, 3.5, 2, 1, 1.5, 1.25, 0.9])

xx = np.linspace(x.min(), x.max(), 100)

fig, ax = plt.subplots(figsize=(8, 4))

ax.scatter(x, y)

for n in [1, 2, 3, 5]:
    f = interpolate.interp1d(x, y, kind=n)
    ax.plot(xx, f(xx), label='order %d' % n)

ax.legend()
ax.set_ylabel(r"$y$", fontsize=18)
ax.set_xlabel(r"$x$", fontsize=18)

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
可以看到,二階或三階樣條已經(jīng)能夠提供較好的插值。高階樣條會(huì)出現(xiàn)高階多項(xiàng)式插值中類似的數(shù)值震蕩問題。

3.4 多變量插值


多項(xiàng)式插值和樣條插值都可以直接推廣到多變量情況。SciPy為多變量插值提供了多個(gè)函數(shù)和類。我們將介紹兩個(gè)最常用的雙變量插值函數(shù):interpolate.interp2dinterpolate.griddata。

3.4.1 均勻網(wǎng)格

interpolate.interp2d函數(shù)是interpolate.interp1d函數(shù)的推廣,要求數(shù)據(jù)點(diǎn)位于x和y坐標(biāo)組成的規(guī)則且均勻的網(wǎng)格中。

為了演示函數(shù)用法,我們?cè)谝阎瘮?shù)
f ( x , y ) = exp ? ( ? ( x + 1 / 2 ) 2 ? 2 ( y + 1 / 2 ) 2 ) ? exp ? ( ? ( x ? 1 / 2 ) 2 ? 2 ( y ? 1 / 2 ) 2 ) f(x, y) = \exp(-(x+1/2)^2 - 2(y+1/2)^2) - \exp(-(x-1/2)^2 - 2(y-1/2)^2) f(x,y)=exp(?(x+1/2)2?2(y+1/2)2)?exp(?(x?1/2)2?2(y?1/2)2)
中添加隨機(jī)噪聲來模擬測量噪聲。為了構(gòu)造插值問題,我們?cè)趚和y坐標(biāo)的[-2, 2]區(qū)間上采樣10個(gè)點(diǎn)。

def f(x, y):
    return np.exp(-(x + .5)**2 - 2*(y + .5)**2) - np.exp(-(x - .5)**2 - 2*(y - .5)**2)

x = y = np.linspace(-2, 2, 10)
X, Y = np.meshgrid(x, y)
# simulate noisy data at fixed grid points X, Y
Z = f(X, Y) + 0.05  * np.random.randn(*X.shape)
f_interp = interpolate.interp2d(x, y, Z, kind='cubic')  # 三次樣條插值
xx = yy = np.linspace(x.min(), x.max(), 100)
ZZ_interp = f_interp(xx, yy)
XX, YY = np.meshgrid(xx, yy)

fig, axes = plt.subplots(1, 2, figsize=(12, 5))

c = axes[0].contourf(XX, YY, f(XX, YY), 15, cmap=plt.cm.RdBu)
axes[0].set_xlabel(r"$x$", fontsize=20)
axes[0].set_ylabel(r"$y$", fontsize=20)
axes[0].set_title("exact / high sampling")
cb = fig.colorbar(c, ax=axes[0])
cb.set_label(r"$z$", fontsize=20)

c = axes[1].contourf(XX, YY, ZZ_interp, 15, cmap=plt.cm.RdBu)
axes[1].set_ylim(-2.1, 2.1)
axes[1].set_xlim(-2.1, 2.1)
axes[1].set_xlabel(r"$x$", fontsize=20)
axes[1].set_ylabel(r"$y$", fontsize=20)
axes[1].scatter(X, Y, marker='x', color='k')
axes[1].set_title("interpolation of noisy data / low sampling")
cb = fig.colorbar(c, ax=axes[1])
cb.set_label(r"$z$", fontsize=20)

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
對(duì)于更高維的問題,可以使用interpolate.interpnd函數(shù),它是對(duì)N維問題的推廣。

3.4.2 不均勻網(wǎng)格

另一種多變量插值的常見場景是從不規(guī)則的坐標(biāo)網(wǎng)絡(luò)中采樣數(shù)據(jù),例如實(shí)驗(yàn)室數(shù)據(jù)等。為了能夠使用現(xiàn)有的工具對(duì)數(shù)據(jù)進(jìn)行可視化分析,可能需要將它們插值到規(guī)則的坐標(biāo)網(wǎng)格中。

在SciPy中,可以使用interpolate.griddata函數(shù)來完成這項(xiàng)工作。該函數(shù)的第一個(gè)參數(shù)是坐標(biāo)向量構(gòu)成的元組,第二個(gè)參數(shù)是對(duì)應(yīng)的數(shù)據(jù)點(diǎn)的值,第三個(gè)參數(shù)是待插值的新數(shù)據(jù)點(diǎn)的坐標(biāo)數(shù)組或坐標(biāo)矩陣。
我們考慮函數(shù) f ( x , y ) = exp ? ( ? x 2 ? y 2 ) cos ? 4 x sin ? 6 y f(x, y) = \exp(-x^2-y^2) \cos 4x \sin 6y f(x,y)=exp(?x2?y2)cos4xsin6y在x和y坐標(biāo)區(qū)間[-1, 1]上隨機(jī)選擇的采樣點(diǎn),并對(duì)采樣數(shù)據(jù)進(jìn)行插值。

def f(x, y):
    return np.exp(-x**2 - y**2) * np.cos(4*x) * np.sin(6*y)

x = y = np.linspace(-1, 1, 100)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
np.random.seed(0)
N = 500
xdata = np.random.uniform(-1, 1, N)
ydata = np.random.uniform(-1, 1, N)
zdata = f(xdata, ydata)

我們畫出函數(shù) ??(??,??) 的等高線圖,以及500個(gè)采樣點(diǎn)的位置。

fig, ax = plt.subplots(figsize=(8, 6))
c = ax.contourf(X, Y, Z, 15, cmap=plt.cm.RdBu);
ax.scatter(xdata, ydata, marker='.')
ax.set_ylim(-1,1)
ax.set_xlim(-1,1)
ax.set_xlabel(r"$x$", fontsize=20)
ax.set_ylabel(r"$y$", fontsize=20)

cb = fig.colorbar(c, ax=ax)
cb.set_label(r"$z$", fontsize=20)

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
隨后,我們使用X和Y坐標(biāo)數(shù)組定義更細(xì)小間隔(超采樣)的網(wǎng)格中對(duì)數(shù)據(jù)進(jìn)行插值。我們將比較最近鄰點(diǎn)插值(0階插值)、線性插值(1階插值)和三次樣條插值在不用數(shù)據(jù)點(diǎn)數(shù)目下的效果區(qū)別。

def z_interpolate(xdata, ydata, zdata):
    Zi_0 = interpolate.griddata((xdata, ydata), zdata, (X, Y), method='nearest')
    Zi_1 = interpolate.griddata((xdata, ydata), zdata, (X, Y), method='linear')
    Zi_3 = interpolate.griddata((xdata, ydata), zdata, (X, Y), method='cubic')
    return Zi_0, Zi_1, Zi_3

fig, axes = plt.subplots(3, 3, figsize=(12, 12), sharex=True, sharey=True)

n_vec = [50, 150, 500]

for idx, n in enumerate(n_vec):
    Zi_0, Zi_1, Zi_3 = z_interpolate(xdata[:n], ydata[:n], zdata[:n])
    axes[idx, 0].contourf(X, Y, Zi_0, 15, cmap=plt.cm.RdBu)
    axes[idx, 0].set_ylabel("%d data points\ny" % n, fontsize=16)
    axes[idx, 0].set_title("nearest", fontsize=16)
    axes[idx, 1].contourf(X, Y, Zi_1, 15, cmap=plt.cm.RdBu)
    axes[idx, 1].set_title("linear", fontsize=16)
    axes[idx, 2].contourf(X, Y, Zi_3, 15, cmap=plt.cm.RdBu)
    axes[idx, 2].set_title("cubic", fontsize=16)

for m in range(len(n_vec)):
    axes[idx, m].set_xlabel("x", fontsize=16)

python 插值,深度學(xué)習(xí),python,python,線性代數(shù),機(jī)器學(xué)習(xí)
只要采樣點(diǎn)能夠有效覆蓋我們感興趣的區(qū)域,就可以通過非結(jié)構(gòu)化的樣本數(shù)據(jù)進(jìn)行插值來重建函數(shù)。上面例子中,三次樣條插值的效果要遠(yuǎn)優(yōu)于最近鄰點(diǎn)插值和線性插值。

參考文獻(xiàn)來自桑鴻乾老師的課件:科學(xué)計(jì)算和人工智能文章來源地址http://www.zghlxwxcb.cn/news/detail-598999.html

到了這里,關(guān)于【Python數(shù)據(jù)插值】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 深度學(xué)習(xí)-必備的數(shù)學(xué)知識(shí)-線性代數(shù)5

    線性代數(shù) 在數(shù)學(xué)中,分解通常指的是將一個(gè)復(fù)雜的對(duì)象或結(jié)構(gòu)分解為更簡單的部件或組件。這個(gè)概念在許多數(shù)學(xué)領(lǐng)域都有應(yīng)用。在線性代數(shù)中,矩陣分解是常見的一個(gè)主題,我們通過分解矩陣來發(fā)現(xiàn)它不明顯的性質(zhì)。 矩陣有許多種的分解方式:LU分解、QR分解、特征分解、奇

    2024年02月02日
    瀏覽(28)
  • 深度學(xué)習(xí)-必備的數(shù)學(xué)知識(shí)-線性代數(shù)(合集)

    為方便大家閱讀,這里推出一個(gè)線性代數(shù)的合集。這與之前的內(nèi)容是一致的。 我們?cè)谏疃葘W(xué)習(xí)-簡介和 深度學(xué)習(xí)-歷史背景中已經(jīng)初步了解的深度學(xué)習(xí)。在我們開始學(xué)習(xí)深度學(xué)習(xí)前還需要做些準(zhǔn)備工作。就是學(xué)習(xí)應(yīng)用數(shù)學(xué)和機(jī)器學(xué)習(xí)基礎(chǔ)。 想要理解深度學(xué)習(xí)這些是必不可少的

    2024年02月03日
    瀏覽(28)
  • 深度學(xué)習(xí)-必備的數(shù)學(xué)知識(shí)-線性代數(shù)-1

    我們?cè)谏疃葘W(xué)習(xí)-簡介和 深度學(xué)習(xí)-歷史背景中已經(jīng)初步了解的深度學(xué)習(xí)。在我們真正開始學(xué)習(xí)深度學(xué)習(xí)前還需要做些準(zhǔn)備工作。那就是學(xué)習(xí)應(yīng)用數(shù)學(xué)和機(jī)器學(xué)習(xí)基礎(chǔ)。想要理解深度學(xué)習(xí)這些是必不可少的。 我將在這篇文章中為大家介紹一部分與深度學(xué)習(xí)有關(guān)的線性代數(shù)。 我

    2024年02月05日
    瀏覽(31)
  • 線性代數(shù)的學(xué)習(xí)和整理23:用EXCEL和python 計(jì)算向量/矩陣的:內(nèi)積/點(diǎn)積,外積/叉積

    線性代數(shù)的學(xué)習(xí)和整理23:用EXCEL和python 計(jì)算向量/矩陣的:內(nèi)積/點(diǎn)積,外積/叉積

    ? 目錄 1 乘法 1.1 標(biāo)量乘法(中小學(xué)乘法) 1.1.1 乘法的定義 1.1.2 乘法符合的規(guī)律 1.2 向量乘法 1.2.1 向量:有方向和大小的對(duì)象 1.2.2 向量的標(biāo)量乘法 1.2.3 常見的向量乘法及結(jié)果 1.2.4 向量的其他乘法及結(jié)果 1.2.5?向量的模長(長度) 模長的計(jì)算公式 1.2.6 距離 2 向量的各種乘法 2

    2024年01月23日
    瀏覽(48)
  • 深度學(xué)習(xí)基礎(chǔ)知識(shí)(三)-線性代數(shù)的實(shí)現(xiàn)

    1.標(biāo)量使用 標(biāo)量由只有一個(gè)元素的張量表示,標(biāo)量可以做最簡單的計(jì)算。 結(jié)果: 2.向量使用 向量:將標(biāo)量值組成的列表就是向量 結(jié)果: 訪問張量的長度 只有一個(gè)軸的張量,形狀只有一個(gè)元素 創(chuàng)建一個(gè)二維矩陣5行4列,然后將矩陣做轉(zhuǎn)置,軸對(duì)稱的一個(gè)轉(zhuǎn)置 結(jié)果:其實(shí)就是把

    2024年02月10日
    瀏覽(27)
  • 動(dòng)手學(xué)深度學(xué)習(xí)2.3線性代數(shù)-筆記&練習(xí)(PyTorch)

    以下內(nèi)容為結(jié)合李沐老師的課程和教材補(bǔ)充的學(xué)習(xí)筆記,以及對(duì)課后練習(xí)的一些思考,自留回顧,也供同學(xué)之人交流參考。 本節(jié)課程地址:線性代數(shù)_嗶哩嗶哩_bilibili 本節(jié)教材地址:2.3. 線性代數(shù) — 動(dòng)手學(xué)深度學(xué)習(xí) 2.0.0 documentation (d2l.ai) 本節(jié)開源代碼:…d2l-zhpytorchchapter_pr

    2024年04月12日
    瀏覽(28)
  • 深度學(xué)習(xí)的數(shù)學(xué)基礎(chǔ):從線性代數(shù)到隨機(jī)過程

    深度學(xué)習(xí)是人工智能領(lǐng)域的一個(gè)重要分支,它主要通過模擬人類大腦中的神經(jīng)網(wǎng)絡(luò)來進(jìn)行數(shù)據(jù)處理和學(xué)習(xí)。深度學(xué)習(xí)的核心技術(shù)是神經(jīng)網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò)由多個(gè)節(jié)點(diǎn)組成,這些節(jié)點(diǎn)之間有權(quán)重和偏置的連接。通過對(duì)這些節(jié)點(diǎn)進(jìn)行訓(xùn)練,我們可以使神經(jīng)網(wǎng)絡(luò)具有學(xué)習(xí)和推理的能力

    2024年03月18日
    瀏覽(23)
  • 李沐 《動(dòng)手學(xué)深度學(xué)習(xí)》預(yù)備知識(shí) 線性代數(shù)與微積分

    李沐《動(dòng)手學(xué)深度學(xué)習(xí)》預(yù)備知識(shí) 張量操作與數(shù)據(jù)處理 教材:李沐《動(dòng)手學(xué)深度學(xué)習(xí)》 標(biāo)量(scalar) 僅包含一個(gè)數(shù)值被稱為標(biāo)量,標(biāo)量由只有一個(gè)元素的張量表示。 向量 向量可以被視為標(biāo)量值組成的列表,向量由一維張量表示。一般來說,張量可以具有任意長度,取決于

    2024年01月20日
    瀏覽(27)
  • 【AI】《動(dòng)手學(xué)-深度學(xué)習(xí)-PyTorch版》筆記(五):線性代數(shù)

    標(biāo)量就是我們常見的單個(gè)數(shù)字(包括整數(shù)、小數(shù)等等),可以使用只有一個(gè)元素的張量表示 用小寫字母表示,如:x、y、z

    2024年02月15日
    瀏覽(21)
  • 深度學(xué)習(xí)需要掌握的數(shù)學(xué)知識(shí)②【線性代數(shù)-part2】

    深度學(xué)習(xí)需要掌握的數(shù)學(xué)知識(shí)②【線性代數(shù)-part2】

    1.克萊姆法則 線性方程組 { a 11 x 1 + a 12 x 2 + ? + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ? + a 2 n x n = b 2 ? ? ? ? ? ? ? ? ? a n 1 x 1 + a n 2 x 2 + ? + a n n x n = b n begin{cases} a_{11}x_{1} + a_{12}x_{2} + cdots +a_{1n}x_{n} = b_{1} \\\\ a_{21}x_{1} + a_{22}x_{2} + cdots + a_{2n}x_{n} =b_{2} \\\\ quadcdotscdotscd

    2024年02月16日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包