[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

*To*: Guillaume Dargaud <dargaud(at)sung3.ifsi.rm.cnr.it>*Subject*: Re: Where is the largest point ?*From*: tam <tam(at)lheapop.gsfc.nasa.gov>*Date*: Wed, 08 Aug 2001 16:50:44 -0400*Newsgroups*: comp.lang.idl-pvwave*Organization*: NASA/GSFC(USRA)*References*: <3b719b88@news.ColoState.EDU> <3B719D77.CE635A6A@bigelow.org>*Xref*: news.doit.wisc.edu comp.lang.idl-pvwave:26086

There's a bit of black magic regarding how IDL treats arrays. Any multi-dimensional array can be treated as a 1-d array and in a number of contexts IDL always treats arrays that way. Suppose you have a two-D 500x400 array. When you use it in the max function, IDL treats it as a 1-D 200000 element array, so you just get back a scalar value for maxIndex. To get the 2-d indices just use: ix = maxIndex % 500 iy = maxIndex / 500 -- note that we use the X size in both lines. The same thing happens with the where function. E.g., suppose you want to know all of the values where your array is 0. w = where(array eq 0) Now w is an array of the indices into the array but again treating it as a 1-D array. [It just has a single element -1 if there are no values satisfying the criteria]. Often its fine to just access the array as if it were 1-d, e.g, array[w] = 0.1 but if you need to get the x and y indices (e.g., in a distance calculation), then you want to do px = w%nx py = w/nx where nx is the number of elements in a single line. Now px and py will be arrays with the same length as w and you can use array[w] or array[px,py] interchangeably. Hope this helps more than it confuses, Good luck, Tom McGlynn Ben Tupper wrote: > > Hi, > > Take a peek at the MAX function (check the online help) > > maxVal = Max(Arrat, maxIndex) > > maxVal will return the maximum value > maxIndex will return the index of the maximum value within the array. > If there is more than one value qualifying as MAX, then only the index > of the first maxVal encountered is returned in maxIndex. > > Ben > > Guillaume Dargaud wrote: > > > > I'm still pretty basic at IDL and a lot of the _no loop_ concepts escape me > > entirely (I'm too used to C and such). > > If I have a 2D matrix, how do I find where is the maximum ? > > Say: > > > > Mat=FltArr(NbX, NbY) > > ... > > [Xmax, YMax] = Where( Mat eq Max(Mat) ) > > > > or something like that ? > > -- > > Guillaume Dargaud > > Colorado State University - Dept of Atmospheric Science > > http://rome.atmos.colostate.edu/ > > "If those folks in Kansas are right about evolution never having happened, > > I sure hope it happens soon." - Michael Sheinbaum. > > -- > Ben Tupper > Bigelow Laboratory for Ocean Sciences > 180 McKown Point Rd. > W. Boothbay Harbor, ME 04575 > btupper@bigelow.org

**Follow-Ups**:**Re: Where is the largest point ?***From:*Guillaume Dargaud

**References**:**Where is the largest point ?***From:*Guillaume Dargaud

**Re: Where is the largest point ?***From:*Ben Tupper

- Prev by Date:
**histogram question** - Next by Date:
**Re: Testers needed for TV benchmark** - Prev by thread:
**Re: Where is the largest point ?** - Next by thread:
**Re: Where is the largest point ?** - Index(es):