comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: Where is the largest point ?
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Re: Where is the largest point ? [message #26136] Wed, 08 August 2001 14:03
Guillaume Dargaud is currently offline  Guillaume Dargaud
Messages: 15
Registered: January 2001
Junior Member
> 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.
Thanks for the detailed explanation.
It's good to know but not much worse than other languages (take C that only
has 1D arrays or arrays of arrays).
--
Guillaume Dargaud
Colorado State University - Dept of Atmospheric Science
http://rome.atmos.colostate.edu/
"The scientific theory I like best is that the rings of Saturn are
composed entirely of lost airline luggage." - Mark Russell.
Re: Where is the largest point ? [message #26138 is a reply to message #26136] Wed, 08 August 2001 13:50 Go to previous message
tam is currently offline  tam
Messages: 48
Registered: February 2000
Member
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
Re: Where is the largest point ? [message #26140 is a reply to message #26138] Wed, 08 August 2001 13:13 Go to previous message
btt is currently offline  btt
Messages: 345
Registered: December 2000
Senior Member
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
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Where is the largest point ?
Next Topic: Re: IDL virtual reality (was 3D Object IDL )

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Wed Oct 08 14:32:45 PDT 2025

Total time taken to generate the page: 0.00395 seconds