Re: Little help on arrays - 2nd try [message #38034] |
Mon, 16 February 2004 16:56 |
Craig Markwardt
Messages: 1869 Registered: November 1996
|
Senior Member |
|
|
=?ISO-8859-2?Q?F=F6ldy_Lajos?= <foldy@rmki.kfki.hu> writes:
>
> oops, just a little correction:
>
> if (min(x-y, max=max) eq max) and (max eq 0) then print, 'bingo!'
This is fine, and I agree it's likely to be faster, but I prefer to
pull the MIN() function call out of the IF statement. IDL doesn't
appear to guarantee the order of execution within statements, so it's
a bit risky to assume that the variable MAX will always be set
properly. [ Although, it does appear to be here. ]
Also, and this is a bit nit-picky, perhaps it's a bit dangerous to use
a variable named MAX, when a built-in function of the same name is
also present is a recipe for confusion, no?
Craig
--
------------------------------------------------------------ --------------
Craig B. Markwardt, Ph.D. EMAIL: craigmnet@REMOVEcow.physics.wisc.edu
Astrophysics, IDL, Finance, Derivatives | Remove "net" for better response
------------------------------------------------------------ --------------
|
|
|
Re: Little help on arrays - 2nd try [message #38039 is a reply to message #38034] |
Mon, 16 February 2004 12:45  |
Foldy Lajos
Messages: 268 Registered: October 2001
|
Senior Member |
|
|
On Mon, 16 Feb 2004, Földy Lajos wrote:
>
> On Mon, 16 Feb 2004, Craig Markwardt wrote:
>
>>
>> Nuno Oliveira <nmoliveira@fc.ul.pt> writes:
>>
>>
>>> How do I compare one array with another? I want to avoid comparing
>>> position per position.
>>>
>>> IDL> if [1,1] eq [1,1] then print, 'bingo!'
>>> % Expression must be a scalar or 1 element array in this context: <BYTE
>>> Array[2]>.
>>> % Execution halted at: $MAIN$
>>
>> The other posters have good ideas. My own idiom for this comparison
>> is:
>>
>> if total(abs(X-Y)) EQ 0 then print, 'bingo!'
>>
>> Craig
>>
>>
>
> Hi,
>
> I think
>
> if min(x-y, max=max) eq max then print, 'bingo!' ; for integer arrays
>
> is about 20% faster for arrays greater than cache memory.
>
> regards,
> lajos
>
>
oops, just a little correction:
if (min(x-y, max=max) eq max) and (max eq 0) then print, 'bingo!'
regards,
lajos
|
|
|