Re: array addressing [message #2514] |
Tue, 02 August 1994 02:44  |
sjt
Messages: 72 Registered: November 1993
|
Member |
|
|
Terry Kucera (kucera@stars.gsfc.nasa.gov) wrote:
: In article <CtvMnL.MAD@hpl.hp.com>, peter@hpl.hp.com (Peter Webb) writes...
: >William Thompson (thompson@orpheus.gsfc.nasa.gov) wrote:
: >: kump@morph.ebme.cwru.edu (Kenneth S. Kump) writes:
: >
: >: >Just a quick question:
: >
: >: >A=indarr(10,5)
: >: >B=[0,0,1,0,1]
: >
: >
: >: >I would like array C to consist of only A(*,2) and A(*,4).
: >: >I understand why C=A(*,B) doesn't work, but what is the
: >: >correct way?
: >
: >: Just thinking off the top of my head, one could do something like the
: >: following:
: >
: >: IDL> SZ = SIZE(A) ;Get dimensions of A
: >: IDL> BB = REPLICATE(1,SZ(1)) # B ;Match dims. of B to A
: >: IDL> C = A(WHERE(BB EQ 1)) ;Extract requested data
: >: IDL> C = REFORM(C,SZ(1),TOTAL(B)) ;Rectify dimensions
: >
: >: I haven't actually tried this to confirm that it works, but I think it will.
: >: :^)
: >
: >: Bill Thompson
: >
: >Or, c=a(*,[2,4]) might be a bit easier...
: Or, c=a(*,where(b)) if you don't know b ahead of time.
: Terry Kucera
maybe for safety you might be better with:
locs=where(b,nl)
if (nl ne 0) then c=a(*,locs)
to avoid the risk of having effectively c=a(*,-1) which will crash your
program.
--
James Tappin, School of Physics & Space Research
University of Birmingham
sjt@xun8.sr.bham.ac.uk
"If all else fails--read the instructions!"
O__
-- \/`
|
|
|