Interpolieren großen unregelmäßigen raster auf ein anderes unregelmäßigen raster in Python
Ich versuche zu interpolieren komplexe Werte von einem unregelmäßigen raster auf eine andere unregelmäßige raster mit Python. Die Gitter sind in 2D und es gibt 103,113 Daten Punkte. Ich bin mit Python 2.6.6, Scipy 0.7.2, Numpy 1.3.0, Matplotlib 0.99.3
In Matlab mit griddata erreicht wird dies in etwa 5 Sekunden.
BnGRID2 = griddata(R_GRID1,Z_GRID1,BnGRID1,R_GRID2,Z_GRID2) (MATLAB)
(Hinweis: alle arrays sind 201 x 513)
Allerdings, wenn ich versuche mit matplotlib.mlab.griddata bekomme ich eine memoryError-auch wenn ich versuche, die Arbeit mit den Realteil:
mlab.griddata(R_GRID1.flatten(),Z_GRID1.flatten(),num.real(BnGRID1.flatten()),R_GRID2.flatten(),Z_GRID2.flatten())
Wenn ich versuche über interp2d bekomme ich einen segmentation fault und Python-Ausgänge:
a = interp.interp2d(R_GRID1,Z_GRID1,num.real(BnGRID1))
Habe ich versucht, mit KDTree und das scheint zu funktionieren ok, aber es dauert ein paar Minuten, verglichen mit den paar Sekunden von Matlab, aber das habe ich noch nicht erforscht, diese option zu viel, aber.
Frage mich, ob jemand irgendwelche Ideen hat, wie kann ich das so schnell wie Matlab scheint? Ich habe bemerkt, dass die neuere version von Scipy hat auch griddata, weiß jemand, ob diese verarbeiten kann große unregelmäßige Netze?
InformationsquelleAutor s_haskey | 2011-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scipy ist griddata zu sein scheint in der Lage Umgang mit Daten-sets in dieser Größe ohne Probleme:
Dem griddata Schritt dauert etwa 5s auf einem alten AMD Athlon.
Wenn Ihre Daten auf einem raster (D. H., die Koordinaten entsprechend dem Wert z[i,j] (x[i], y[j])), Sie können Holen Sie mehr Geschwindigkeit durch die Verwendung scipy.interpolieren.RectBivariateSpline
nimmt 0.05 s. Es ist viel schneller, denn auch wenn Sie Ihre raster-Abstände sind unregelmäßig, ein effizienter Algorithmus kann verwendet werden, solange das Gitter ist rechteckig.
InformationsquelleAutor pv.