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

Home » Public Forums » archive » Re: Was: Index... Now: Vectorize, huh?
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: Was: Index... Now: Vectorize, huh? [message #24606 is a reply to message #24605] Thu, 05 April 2001 14:11 Go to previous messageGo to previous message
Stein Vidar Hagfors H[1] is currently offline  Stein Vidar Hagfors H[1]
Messages: 56
Registered: February 2000
Member
"Pavel A. Romashkin" <pavel.romashkin@noaa.gov> writes:

> Craig and Med,
>
> I appreciate it! This is exactly what I needed. My problem is the lack
> of matrix operations knowledge. Craig's generic solution is exactly what
> I expected to see from Craig :-)
>
> By the way. We all are big on vectorizing things in IDL. But look at this:
>
> IDL> a = test(2000)
> 1.4968959
> IDL> a = test(2000, /v)
> 3.2976190
>
> where TEST is below. I don't even mention that /VEC causes extremely
> high memory usage and gets totally out of hand on my system if S > 5000
> or so.
>
> ;******************************
> pro test, s, vec=vec
> start = systime(1)
> x = findgen(s)
> a = fltarr(s, s)
> if keyword_set(vec) then begin
> a = sqrt(transpose(rebin(x, s, s))^2 + rebin(x, s, s)^2)

Now, this is a bit unfair! First (but least), you're generating a useless "a =
fltarr.." for the vector case. Then, you're doing everything in the wrong
order (exploding the array first, then squaring it), and you're also using
a transpose when it is not necessary:

x2 = x^2 ; This could be used to speed up your "nonvectorized" code as well
a = sqrt(rebin(reform(x2,1,s,/overwrite), s, s) + $
rebin(reform(x2,s,1,/overwrite), s, s))

(But still, non-vectorizing code is 2x faster (with the x2 = x^2
optimization): Running through the large arrays several times is the killer, I
suspect. It may be architecture dependant, I presume).

But then, your "nonvectorized" code *is* vectorized (x is a vector), and it's
generally accepted that avoiding loops don't really buy you much when
operating on very large units. It's an intriguing example, though!

And for e.g. s = 200 the vectorized code is slightly faster..

> endif else begin
> for i = 0, s-1 do begin
> a[0, i] = sqrt(x^2 + i^2.)
> endfor
> endelse
> print, systime(1) - start
> ;return, a
> end
> ;******************************

--
Stein Vidar Hagfors Haugan
ESA SOHO SOC/European Space Agency Science Operations Coordinator for SOHO
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Previous Topic: Header File *.h?
Next Topic: Re: Cant find functions in lib

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

Current Time: Fri Jul 03 14:38:12 PDT 2026

Total time taken to generate the page: 0.88166 seconds