簡體   English   中英

我可以使用例如 scipy griddata 創建和插值嗎?

[英]Can I create and interpolant using e.g. scipy griddata?

我正在將一個 matlab 腳本轉換為一個 python 腳本,在那里我使用了函數scatteredInterpolant()。 在 matlab 中,它有一個很好的特性,它創建一個插值,我可以在幾個選定的點上進行評估,這比在整個域上創建插值網格數據要快得多。 從matlab手冊它說:

% Fast to create interpolant F and evaluate multiple times
F = scatteredInterpolant(X,Y,V)
v1 = F(Xq1,Yq1)
v2 = F(Xq2,Yq2)

% Slower to compute interpolations separately using griddata
v1 = griddata(X,Y,V,Xq1,Yq1)
v2 = griddata(X,Y,V,Xq2,Yq2)

到目前為止,我只找到了后一種方法的 python 替代方法,無論我在以下位置評估插值多少點,它都需要大約相同的時間:

import numpy as np
from scipy.interpolate import griddata
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

# example surface
[theta, phi] = np.meshgrid(
    np.linspace(0, 2.0 * np.pi, 100),
    np.linspace(np.spacing(1), np.pi/2-np.pi/20, 100))
x = 1.0*np.multiply(np.cos(theta), np.sin(phi))
y = 1.0*np.multiply(np.sin(theta), np.sin(phi))
z = 1.0 * np.cos(phi)


[xi, yi] = np.meshgrid(np.linspace(-1, 1, 10),
                       np.linspace(-1, 1, 10))
%timeit zi = griddata((np.reshape(x, -1), np.reshape(y, -1)), np.reshape(z, -1), (xi, yi), method='linear')
%timeit zi_singlepoint = griddata((np.reshape(x, -1), np.reshape(y, -1)), np.reshape(z, -1), (0.0, 0.0), method='linear')

是否可以使用 scipy 中的 griddata() 函數或 python 中的其他模塊獲得可以在 matlab 中進行評估的插值?

編輯:我剛剛發現基於 scipy.interpolate.BivariateSpline 的函數與 matlabsscatterinterpolant() 的工作方式類似。 來自文檔:“ BivariateSpline 類是 UnivariateSpline 類的二維模擬。它及其子類以面向對象的方式實現上述 FITPACK 函數,允許實例化對象,這些對象可以通過調用來計算樣條值傳入兩個坐標作為兩個參數。 ”我會嘗試一下然后回來。

可以使用給定坐標調用和評估的一些插值方法是:

scipy.interpolate.SmoothBivariateSpline
scipy.interpolate.Rbf
scipy.interpolate.NearestNDInterpolator
scipy.interpolate.LinearNDInterpolator
scipy.interpolate.CloughTocher2DInterpolator

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM