Podstawowym dlaczego jest to, że griddata
przenika points
i xi
przez points = _ndim_coords_from_arrays(points)
funkcji, której dokumentacja brzmi:
Convert a tuple of coordinate arrays to a (..., ndim)-shaped array.
i klucz działanie na krotki jest:
p = np.broadcast_arrays(*points)
cokolwiek innego, w tym wykaz jest konwertowany na tablicę:
points = np.asanyarray(points)
Rzeczywista interpolacja oczekuje, że tablice będą miały wymiar "3d" jako ostatni.
Twoja lista macierzy 3 (200,200,200)
staje się tablicą o kształcie (3,200,200,200)
. Ale Twoja tablica points
to (50,3)
. Komunikat o błędzie number of dimensions in xi does not match x
jest wynikiem 200
niezgodny z 3
.
Dokumentacja griddata
jest jasna o points
, w mniejszym stopniu dla xi
. Ale jego przykład używa (x, Y)
przy użyciu tablic z mgrid
.
Więc to będzie działać:
X, Y, Z = np.meshgrid(*([np.linspace(-1,1,200)] * 3))
interp_vals = scipy.interpolate.griddata(points, values, (X,Y,Z), 'linear')
Innym sposobem generowania wymaganej tablicę z listy meshgrid
jest zrobić to tablica, i toczyć 1st wymiar
grid_vals = np.rollaxis(np.array(grid_vals),0,4)
Innym sposobem tworzenia siatka to np.ix_
, która zwraca otwartą siatkę w postaci krotki. Tak otwarta siatka potrzebuje nadawania.
Pojedynczy punkt będzie interpolowana z albo:
interpolate.griddata(points,values,[[[[0,0,0]]]],'linear')
interpolate.griddata(points,values,([0],[0],[0]),'linear')
Zobacz reakcja na prośbę Jana 4123
ciągnącej ma więcej dyskusji na temat whys.