La base per questo è che griddata
passa sia points
e xi
attraverso una funzione points = _ndim_coords_from_arrays(points)
la cui documentazione si legge:
Convert a tuple of coordinate arrays to a (..., ndim)-shaped array.
e tasto azione sul tuple è:
p = np.broadcast_arrays(*points)
qualsiasi altra cosa, compreso un elenco , è appena convertito in un array:
points = np.asanyarray(points)
L'interpolazione effettiva prevede l'ultimo array con dimensione "3d".
Quindi l'elenco di 3 array (200,200,200)
diventa un array di (3,200,200,200)
forma. Ma l'array points
è (50,3)
. I risultati del messaggio number of dimensions in xi does not match x
da 200
non corrispondono a 3
.
La documentazione griddata
è chiara su points
, meno per xi
. Ma il suo esempio utilizza (x, Y)
utilizzando gli array da mgrid
.
Quindi questo dovrebbe funzionare:
X, Y, Z = np.meshgrid(*([np.linspace(-1,1,200)] * 3))
interp_vals = scipy.interpolate.griddata(points, values, (X,Y,Z), 'linear')
Un altro modo di generare la matrice richiesta dalla lista meshgrid
è quello di rendere un array, e girare la prima dimensione
grid_vals = np.rollaxis(np.array(grid_vals),0,4)
Un altro modo di generare una mesh è , che restituisce una mesh aperta sotto forma di tupla. Una rete aperta come questa ha bisogno della trasmissione.
Un unico punto sarebbe stato interpolato con entrambi:
interpolate.griddata(points,values,[[[[0,0,0]]]],'linear')
interpolate.griddata(points,values,([0],[0],[0]),'linear')
vedere la reazione alla richiesta di pull 4123
John ha più discussione sui perché.