Ho una griglia regolare di valori di allenamento (i vettori xey con le rispettive griglie xmesh e ymesh e valori noti di zmesh) ma una sparsa/irregolare/gruppo irregolare di valori da interpolare (vettori xI e yI, dove siamo interessati a zI [0] = f (xI [0], yI [0]) ... zI [N-1] = f (xI [N -1], yI [N-1]). Questa interpolazione verrà chiamata milioni di volte come parte di un problema di ottimizzazione, quindi le prestazioni sono troppo importanti per utilizzare semplicemente un metodo che rende la griglia e prende la traccia.Interpolazione 2D veloce in Python con griglia regolare SciPy a valutazione sparsa/irregolare
Finora, sono riuscito a trovare una funzione scipy.interpolate che si avvicina a ciò che voglio, la funzione Bpf. Tuttavia, poiché racconta un input sparsi, presumo che non abbia una buona prestazione e io d li ke per testarlo contro i metodi di interpolazione spline, lineari e vicini più vicini, capisco meglio e mi aspetto che sarà più veloce. Tutti i metodi che implementano questi elementi che sono in grado di rilevare con griglie regolari come dati di allenamento (come RectBivariateSpline) sembrano richiedere anche griglie regolari per i valori da interpolare.
Questo codice si spera che chiarisca cosa sto chiedendo.
import numpy as np
import scipy as sp
import scipy.interpolate as interp
x = np.arange(0,2*np.pi,.1)
y = x
xmesh,ymesh = np.meshgrid(x,y)
zmesh = np.sin(xmesh)+np.cos(ymesh)
rbf = interp.Rbf(xmesh, ymesh, zmesh, epsilon=2)
xI = np.arange(0,np.pi,.05)
yI = xI
XI, YI = np.meshgrid(xI,yI)
# Notice how this is happy to take a vector or grid as input
zI = rbf(xI, yI)
ZI = rbf(XI,YI) # equiv. to zImesh
myspline = interp.RectBivariateSpline(x, y, zmesh)
# myspline takes vectors as input but makes them into meshes for evaluation
splineoutput = myspline(xI, yI)
# myspline returns ZI but I want zI
print(splineoutput)
print(ZI)
print(zI)
C'è qualcosa che posso fare per utilizzare una funzione come RectBivariateSpline ma per ottenere Zi (vettore) invece di ZI (mesh)? Oppure, in alternativa, esiste un'altra famiglia di funzioni che funziona come preferisco con metodi di ottimizzazione alternativi e, in caso affermativo, che cosa dovrei cercare?
Solo un rapido promemoria che ciò che sto cercando è una tecnica di ottimizzazione rapida con array di dati relativamente grandi (oltre 20.000 voci), con piccole distanze tra i punti della griglia e dove i dati sono piuttosto fluidi. Sono sospetto che esista un modo semplice, semplice per fare ciò di cui ho bisogno con le librerie esistenti, ma non riesco a trovarlo. Grazie per l'aiuto.
che sembra essere esattamente quello che volevo. Sapevo che c'era qualcosa di costruito per aiutare. Grazie! – BKay
Vedi anche questa risposta per il caso n-dimensionale: http://stackoverflow.com/questions/16983843/fast-interpolation-of-grid-data – j13r