In scipy 0,14 oder höher, gibt es eine neue Funktion scipy.interpolate.RegularGridInterpolator
das ähnelt interp3
.
Der Befehl MATLAB Vi = interp3(x,y,z,V,xi,yi,zi)
wie etwas übersetzen würde:
from numpy import array
from scipy.interpolate import RegularGridInterpolator as rgi
my_interpolating_function = rgi((x,y,z), V)
Vi = my_interpolating_function(array([xi,yi,zi]).T)
Hier ist ein vollständiges Beispiel demonstriert beide; es wird Ihnen die genauen Unterschiede ...
MATLAB-Code verstehen helfen:
x = linspace(1,4,11);
y = linspace(4,7,22);
z = linspace(7,9,33);
V = zeros(22,11,33);
for i=1:11
for j=1:22
for k=1:33
V(j,i,k) = 100*x(i) + 10*y(j) + z(k);
end
end
end
xq = [2,3];
yq = [6,5];
zq = [8,7];
Vi = interp3(x,y,z,V,xq,yq,zq);
Das Ergebnis ist Vi=[268 357]
, die in der Tat an diesen beiden Punkten (2,6,8)
und (3,5,7)
der Wert ist.
SciPy Code:
from scipy.interpolate import RegularGridInterpolator
from numpy import linspace, zeros, array
x = linspace(1,4,11)
y = linspace(4,7,22)
z = linspace(7,9,33)
V = zeros((11,22,33))
for i in range(11):
for j in range(22):
for k in range(33):
V[i,j,k] = 100*x[i] + 10*y[j] + z[k]
fn = RegularGridInterpolator((x,y,z), V)
pts = array([[2,6,8],[3,5,7]])
print(fn(pts))
Wieder ist es [268,357]
. Sie sehen also einige kleine Unterschiede: Scipy verwendet x, y, z Indexreihenfolge, während MATLAB y, x, z (seltsamerweise) verwendet; In Scipy definieren Sie eine Funktion in einem separaten Schritt und wenn Sie sie aufrufen, werden die Koordinaten gruppiert wie (x1, y1, z1), (x2, y2, z2), ... während Matlab (x1, x2, ..) verwendet. .), (y1, y2, ...), (z1, z2, ...).
Ansonsten sind die beiden ähnlich und ebenso einfach zu bedienen.