Den onsdagen den 6:e juni 2012 kl. 10:42:40 UTC+2 skrev Laura:
> Hi,
>
> I´ve got a temporal serie, temperatures, and I´ve got some 0's I would like to interpolate so that the serie is as complete as posible, with no blank spaces, e.g. no ceros. Is the Interpolate function the correct one to employ in this case?? I´m having problems understanding the location array, I thought I had only to look for the 0's in my serie, for example by
>
> index= where (data eq 0, count)
>
> and then apply the interpolation function, I know I´m missing something but I simply don´t get it.
>
> The example that is on help contents:
>
> p = FINDGEN(4,4)
> PRINT, INTERPOLATE(p, [.5, 1.5, 2.5], [.5, 1.5, 2.5], /GRID)
>
> and prints the 3 by 3 array:
>
> 2.50000 3.50000 4.50000
> 6.50000 7.50000 8.50000
> 10.5000 11.5000 12.5000
>
> corresponding to the locations:
>
> (.5,.5), (1.5, .5), (2.5, .5),
> (.5,1.5), (1.5, 1.5), (2.5, 1.5),
> (.5,2.5), (1.5, 2.5), (2.5, 2.5)
>
> what I know is that
>
> p[0,0]= 0.0000 or p[0,3]=12
>
> but what I don´t get is why
>
> p[0.5,0.5]=0.00000
>
> or
>
> print, p[0.9,0.9]=0.0000
> Does that mean that p[0,0],p[0.5,0.5], and p[0.9,0.9] are equivalent??? How do I construct the location array?
>
> Thank you
>
> Laura
Yes, p[0,0], p[0.5,0.5], and p[0.9,0.9] are equivalent because floating point indexes are turned into integers. So you are accessing the same element in the p array.
As for your own example, interpol might be easier to use than interpolate. Try this:
data=[1.,2.,3.,4.,0.,6.,7.,0.,9.]
data2=data
indx0=where(data eq 0.)
indx1=where(data ne 0.)
data2[indx0]=interpol(data[indx1],indx1,indx0)
print,data
print,data2
It will print out:
1.00000 2.00000 3.00000 4.00000 0.00000 6.00000
7.00000 0.00000 9.00000
and
1.00000 2.00000 3.00000 4.00000 5.00000 6.00000
7.00000 8.00000 9.00000
which I believe is what you wanted?
|