comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: Vectorize procedure
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Re: Vectorize procedure [message #68971] Thu, 10 December 2009 10:03 Go to next message
Romolo Politi is currently offline  Romolo Politi
Messages: 6
Registered: December 2007
Junior Member
On 10 Dic, 16:25, "Kenneth P. Bowman" <k-bow...@null.edu> wrote:
> In article
> < 041dea05-b2af-435a-b9e9-7ca360287...@p35g2000yqh.googlegroup s.com >,
>  Romolo Politi <romolo.pol...@gmail.com> wrote:
>
>> Hi,
>> I'm vectorizing a procedure in order to delete three for loops and
>> increase the speed.
>> I have to calculating the interpolation on a regular grid.
>> newy=interpol(y,x,newx,/spline)
>>  in the loop manner  for each index of the loop  there are  three
>> different arrays .
>> in the vectorize manner I have three 3D matrices, But I do not found a
>> way to calculate the interpolation matrix.
>> Any one have suggestions?
>
>> Thanks
>
>> Romolo
>
> I'm afraid that you have not clearly explained your problem.  Are you
> trying to do 3-D cubic spline interpolation?  As far as I know,
> standard IDL does not contain a multi-dimensional spline interpolation
> procedure, only the 1-D functionality available in INTERPOL, SPLINE, and
> SPL_INTERP.  You can do vectorized multi-dimensional *linear* interpolation
> by using INTERPOLATE.
>
> The Advanced Math and Statistics package (extra cost) includes the IMSL
> spline interpolation functions.  You can view the help files and
> see if that is what you need.
>
>   http://127.0.0.1:60523/help/index.jsp
>
> Ken Bowman

Sorry for the not clarity.
my situation is
x=fltarr(3200,201,201)
y=fltarr(3200,201,201)
newx=fltarr(799,201,201)
newy=fltarr(799,201,201)
for i=0,200 do begin
for j=0,200 do begin
newy[*,i,j]=interpol(y[*,i,j],x[*,i,j],newx[*,i,j],/SPLine)
endfor
endfor

I like vectorize this loop.

Thanks, and sorry again

Romolo Politi
Re: Vectorize procedure [message #68978 is a reply to message #68971] Thu, 10 December 2009 07:25 Go to previous messageGo to next message
Kenneth P. Bowman is currently offline  Kenneth P. Bowman
Messages: 585
Registered: May 2000
Senior Member
In article
<041dea05-b2af-435a-b9e9-7ca360287c69@p35g2000yqh.googlegroups.com>,
Romolo Politi <romolo.politi@gmail.com> wrote:

> Hi,
> I'm vectorizing a procedure in order to delete three for loops and
> increase the speed.
> I have to calculating the interpolation on a regular grid.
> newy=interpol(y,x,newx,/spline)
> in the loop manner for each index of the loop there are three
> different arrays .
> in the vectorize manner I have three 3D matrices, But I do not found a
> way to calculate the interpolation matrix.
> Any one have suggestions?
>
> Thanks
>
> Romolo

I'm afraid that you have not clearly explained your problem. Are you
trying to do 3-D cubic spline interpolation? As far as I know,
standard IDL does not contain a multi-dimensional spline interpolation
procedure, only the 1-D functionality available in INTERPOL, SPLINE, and
SPL_INTERP. You can do vectorized multi-dimensional *linear* interpolation
by using INTERPOLATE.

The Advanced Math and Statistics package (extra cost) includes the IMSL
spline interpolation functions. You can view the help files and
see if that is what you need.

http://127.0.0.1:60523/help/index.jsp

Ken Bowman
Re: Vectorize procedure [message #69164 is a reply to message #68971] Thu, 10 December 2009 12:00 Go to previous message
Kenneth P. Bowman is currently offline  Kenneth P. Bowman
Messages: 585
Registered: May 2000
Senior Member
In article
<b599bcdf-d42e-45d8-b643-7ea4620fd7ed@k19g2000yqc.googlegroups.com>,
Romolo Politi <romolo.politi@gmail.com> wrote:

> Sorry for the not clarity.
> my situation is
> x=fltarr(3200,201,201)
> y=fltarr(3200,201,201)
> newx=fltarr(799,201,201)
> newy=fltarr(799,201,201)
> for i=0,200 do begin
> for j=0,200 do begin
> newy[*,i,j]=interpol(y[*,i,j],x[*,i,j],newx[*,i,j],/SPLine)
> endfor
> endfor

You are doing ~40,000 separate spline fits. I don't think there is
any way to vectorize this, as each fit is an independent problem.
Spline fitting is a coupled problem, so you cannot, for example, simply
string your segments together into one long fit.

If the newx[*,i,j] are the same for all i and j, you can probably get
a significant speed-up by calling SPL_INIT once and then calling
SPL_INTERP for each i and j. Since you are storing newx separately
for each i and j, I gather this is not the case.

Your program is accessing memory efficiently, but you will get a small
speed up by saying

newy[0,i,j]=interpol(y[*,i,j],x[*,i,j],newx[*,i,j],/SPLine)

You might also try the other built in spline functions: SPLINE,
SPLINE_P, SPL_INIT and SPL_INTERP to see whether one is faster.

Finally, I notice that you are downsampling your data substantially.
Are you sure you really need to use a spline fit to do that?

Ken Bowman
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: WCS Coordinates not kept with WRITEFITS
Next Topic: ftp put file on windows using IDL

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 15:32:58 PDT 2025

Total time taken to generate the page: 0.00607 seconds