Hi all,
Good one, Chris. How about this for getting the subset:
PRO IndexXYPairsOverZ
a = Transpose(IndGen(10,10,10), [2,1,0]) ; Array where, e.g. a[3,0,4]=304
xy = [[3,4],[2,1],[3,7]]
z0 = 1
z1 = 3
dims=Size(a,/Dim)
a = Reform(a, dims[0]*dims[1], dims[2], /Overwrite) ; Reshape a temporarily
xyIndices = xy[0,*]+xy[1,*]*dims[0]
subset = a[xyIndices, z0:z1]
a = Reform(a, dims, /Overwrite) ; Restore a's shape
Help, subset
Print, subset
END
Printed result:
SUBSET INT = Array[3, 3]
341 211 371
342 212 372
343 213 373
Note that the Reforms will take effectively no time at all, and you only
make one list of indices.
Hope this helps.
Cheers,
-Dick
--
Dick Jackson Software Consulting http://www.d-jackson.com
Victoria, BC, Canada +1-250-220-6117 dick@d-jackson.com
"Jeremy Bailin" <astroconst@gmail.com> wrote in message
news:a50cae0f-63e5-47b7-a44e-b5363114855a@r37g2000yqn.google groups.com...
On Apr 2, 1:34 am, Chris <beaum...@ifa.hawaii.edu> wrote:
> I would have done something like this, accomplishing the summation in
> two steps
>
> x = [3, 2, 3]
> y = [4, 1, 7]
> sum = total(array[*,*,1:3], 3) ; summed along z direction
> answer = total(sum[x,y]) ; summed over x,y pairs
>
> chris
Yeah, that definitely works nicely for total (I like the fact that it
doesn't need any internal index vectors, and that the intermediate
stage is a constant size independent of npair and nz), which is what
I'm doing today. But it wouldn't work for the more generic case where
I want to do something else to those values - for example, I've needed
to do the equivalent with median before, and that won't work as a 2-
step process.
-Jeremy.
|