2013-08-11 9 views
5

Mam dane z trzema kolumnami (x-piksel, y-piksel, z) z milionem wierszy. Dane pochodzą z obrazu i są zduplikowane wartości Z. Teraz muszę zrobić plan powierzchni. This image to doskonały przykład. Ale teraz obraz wyjściowy ma wartość zerową. Czy ktoś mógłby sprawdzić kod?Jak korzystać z griddata z scipy.interpolate

import numpy as np 
from enthought.mayavi import mlab 
from scipy.interpolate import griddata 
x,y,z = np.loadtxt('test.csv',delimiter=',',usecols=(0,1,2),unpack=True) 
xi,yi = np.mgrid[0:3000:3000j, 0:3000:3000j] 
zi = griddata((x, y), z, (xi, yi),method='linear') 
mlab.surf(xi,yi,zi) 
mlab.show() 
+0

dlaczego '0: 3000: 3000j'? nie powinno być '0: 3000: 1' – pseudoDust

+0

' 0: 3000: 1' jest równie bezsensowne. Może "0: 3000"? – horchler

+0

Te dwa sposoby są takie same. Każda z nich powoduje zi null. – questionhang

Odpowiedz

4

nie mogę sprawdzić kod bez danych, ale podejrzewam, że problemem jest to, że używasz domyślnego fill_value=nan jako griddata argumentu, więc jeśli siatkowe punkty, które rozciągają się poza przestrzenią punkty (x, y), w sieci znajdują się NaN, których mlab może nie być w stanie obsłużyć (matplotlib niełatwo). Spróbuj ustawić fill_value=0 lub inną odpowiednią rzeczywistą liczbę.