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

Home » Public Forums » archive » Re: using the WHERE function on a portion of an array
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: using the WHERE function on a portion of an array [message #59033 is a reply to message #59032] Tue, 04 March 2008 11:38 Go to previous messageGo to previous message
greg.addr is currently offline  greg.addr
Messages: 160
Registered: May 2007
Senior Member
On Mar 4, 8:23 pm, becky_s <rda.se...@gmail.com> wrote:
> Dear all,
>
> Please lend me your great expertise to help me solve this problem I
> have with the WHERE function.
>
> I have a 3d array of heights, A, and another 3d array of observations
> at those heights, B. I have a third 3d array, C. I would like
> C[0,*,*] to contain values of B only if the corresponding value of A
> is between 0 and 1; C[1,*,*] would have values of B only if 1<=A<2,
> etc.
>
> I thought this could be done via a WHERE function call, such as:
> indices = WHERE(A[0,*,*] ge 4 AND A[0,*,*] lt 5, count)
> if count gt 0 then C[4,indices] = B[0,indices]
>
> but this does not work. Printing A[0,indices], I can see that these
> values are not b/w 4 and 5.
>
> On the other hand, if I set each level I am looking at to its own 2d
> array, i.e.,
> leva = A[0,*,*]
> levb = B[0,*,*]
> levc = C[4,*,*]
> use these values in the same code written above, and add the statement
> at the end that C[4,*,*] = levc, then it works just fine. However, A
> and B are actually very large, so this isn't an option.
>
> I'm guessing I do not understand some key part of the WHERE function.
> Would someone please shine some light on this for me? Thanks in
> advance.
> Becky

If I've understood your problem correctly, I'd make one more array to
use for your comparisons:

sz=size(A)
d=rebin(findgen(sz[0]),sz[0],sz[1],sz[2])

and then do the whole job in one step:

q=where((A ge d) and (A lt d+1.))
C[q]=B[q]

regards,
Greg
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Previous Topic: Re: Expensive loops... can they be avoided?
Next Topic: itools (mouse) events

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

Current Time: Wed Oct 08 19:56:48 PDT 2025

Total time taken to generate the page: 0.00439 seconds