Re: How do I get a subset of one array based on the properties of a different array?

From: Mary Haley <haley_at_nyahnyahspammersnyahnyah>
Date: Tue Feb 16 2010 - 15:33:25 MST

Bridget,

If I understand correctly, I think you want to turn x into a 1D
array, so you can sort it and grab the first 30 minimum values, along
with the indexes that represent the first 30 values.

You can then use this to subscript your y array accordingly

This is untested:

   x1d = ndtooned(x)
   ii = dim_pqsort(x1d,1) ; Sort x and return the permutation
vector. "x" will not be changed.

   y1d = ndtooned(y) ; Convert to 1D array so we can reshape to 3D

; Reshape 1D array to 3D array, 59*91 x nlats x nlon
   dims = dimsizes(y)
   y3d = onedtond(y1d,(/dims(0)*dims(1),dims(2),dims(3)/)) ;
Assuming y was 4D

   ynew = y3d(ii(0:29),:,:) ; Grab only the first 30 indexes that
correspond to the minimum values of X

--Mary

On Feb 16, 2010, at 3:04 PM, Bridget Thrasher wrote:

> I have 2 arrays sized as follows: x = (/50,91/) and y = (/
> 50,91,nlats,nlons/). I want to pull out the 30 "maps" from array y
> that correspond to the 30 smallest values in array x (repeats
> possible) so that I end up with an array sized as z = (/
> 30,nlats,nlons/).
>
> I can't figure out how to translate the indexing from the small
> array to the large array after sorting. Or maybe that's not the
> right way to go about it? Any help would be appreciated...
>
> -Bridget
>
> --
> Bridget Thrasher, PhD
> Postdoctoral Researcher
> Climate Central
> www.climatecentral.org
>
>
> _______________________________________________
> ncl-talk mailing list
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk

_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Tue Feb 16 15:33:32 2010

This archive was generated by hypermail 2.1.8 : Thu Feb 18 2010 - 10:33:29 MST