2011-08-15 17 views
6

Tengo malla 2048x2048 de datos irregulares zi = f(xi, yi) que son esencialmente tres conjuntos independientes de 2048 valores reales. Necesito para interpolar sin problemas (quizás spline bicúbico) que en una malla regular de wi = f(ui, vi) donde ui y vi son valores enteros de 0 a 2047.Interpolación 2D de rejilla irregular grande a cuadrícula regular

He tratado gridData que parece funcionar bien en las imágenes de menos de 1000x1000, pero los golpes hasta llegar a 1500x1500 (errores de memoria qhull para Delauney Mesh, evidentemente). He examinado algunas de las funciones ndimage, a saber, geometric_transform, RectBivariateSpline y map_coordinates, pero todas parecen tomar datos regularizados como entrada. ¡Me podría estar perdiendo algo y solo implementarlo mal también!

Estoy tratando de usar Python/SciPy para hacer lo que este script de Matlab he estado haciendo usando tformarray y makeresampler. ¿Alguna sugerencia sobre qué función puedo usar para procesar este gran conjunto de datos? ¡Gracias!

+4

Me gustaría ver esta pregunta: http://stackoverflow.com/questions/1972172/interpolating-a-scalar-field-in-a-3d-space He utilizado la interpolación de Shepard antes con éxito y podría trabajo para ti. – Yann

Respuesta

2

He intentado reproducir sus errores sin éxito. ¿Estás en un sistema de 32 bits? Tuve problemas con scipy/numpy y grandes arreglos cambiados a 64 bits, y no he tenido problemas desde entonces.

Aquí está el código que solía tratar de reproducir el error (que va a generar nada útil, pero al menos debería experimentar los mismos errores):

y,x=indices([2048,2048],dtype='float64') 
z = randn(2048,2048) 
yr = y + randn(2048,2048) 
xr = x + randn(2048,2048) 
zn = griddata(xr.ravel(),yr.ravel(),z.ravel(),x,y) 
zl = griddata(xr.ravel(),yr.ravel(),z.ravel(),x,y,interp='linear') 

Esto funciona en mi máquina.

Si no puede ejecutar una versión de 64 bits de python (que puede ser difícil según el sistema operativo que esté utilizando), ¿podría dividir su cuadrícula de 2048x2048 en 4 cuadrículas de 1024x1024?

+0

Tuve que convertir los puntos de entrada y los puntos de salida en tuplas para que se ejecutara griddata(). En mi Macbook 2011 con 12GB su código hizo 1024x1024 en 33 segundos, y 2048x2048 en 184 segundos –

+0

El código no funciona. Además de las importaciones, debe envolver las entradas griddata() en una sola tupla como '(xr.ravel(), yr.ravel())' y lo mismo con las salidas: '(x, y)' –

Cuestiones relacionadas