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 #59032 is a reply to message #59029] Tue, 04 March 2008 11:39 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:38 pm, greg.a...@googlemail.com wrote:
> 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

Sorry, that should be:

sz=size(A,/dim)
[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 15:50:10 PDT 2025

Total time taken to generate the page: 0.30541 seconds