Re: "clamping" an array to a maximum value? [message #13934] |
Wed, 23 December 1998 00:00 |
Kevin Ivory
Messages: 71 Registered: January 1997
|
Member |
|
|
Martin Schultz wrote:
> BTW: How about a "last element" operator? I very often need something like
> subdata = data[*,0:n_elements(data[0,*])-1]
Just for completeness: that's probably supposed to be
subdata = data[*,0:n_elements(data[0,*])-2]
Otherwise your problem is trivial and you might as well write
subdata = data
Sorry, no better idea for the original problem, though. Everything
I can think of at the moment is even more complicated. :-(
(Or equivalent:
n_elements(data[0,*]) is the same as (size(data))[2]
which admittedly is not much clearer.)
Happy holidays,
Kevin
--
Kevin Ivory Tel: +49 5556 979 434
Max-Planck-Institut fuer Aeronomie Fax: +49 5556 979 240
Max-Planck-Str. 2 mailto:Kevin@Ivory.de
D-37191 Katlenburg-Lindau, GERMANY http://ivory.de/
|
|
|
Re: "clamping" an array to a maximum value? [message #13941 is a reply to message #13934] |
Tue, 22 December 1998 00:00  |
Craig Markwardt
Messages: 1869 Registered: November 1996
|
Senior Member |
|
|
Martin Schultz <mgs@io.harvard.edu> writes:
> Yup,
>
> that's what I really intended to say/write. BTW: How about a "last
> element" operator? I very often need something like
> subdata = data[*,0:n_elements(data[0,*])-1]
> which is not very aesthetic ;-) is it? It would just be great if one
> could write something like
> subdata = data[*,0:(*)-1] or anything with a similar short syntax
> In this case the parantheses would serve to distinguish between "all
> elements" and "last element". That's probably a little dangerous. Anyone
> with a better idea?
Yes, yes, a billion times yes! A billion is about the number of times
I could have used this capability.
Some present-day scripting languages allow you to supply negative
subscripts, to indicate indexing from the end rather than the front of
the array. data[-1] would indicate the last element, data[-2] the
second to last, etc. Powerful, but maybe *too* powerful.
Craig
--
------------------------------------------------------------ --------------
Craig B. Markwardt, Ph.D. EMAIL: craigmnet@astrog.physics.wisc.edu
Astrophysics, IDL, Finance, Derivatives | Remove "net" for better response
------------------------------------------------------------ --------------
|
|
|
Re: "clamping" an array to a maximum value? [message #13943 is a reply to message #13941] |
Tue, 22 December 1998 00:00  |
Martin Schultz
Messages: 515 Registered: August 1997
|
Senior Member |
|
|
David Fanning wrote:
>
> Kevin Ivory (Kevin@Ivory.de) writes:
>
>> Martin Schultz wrote:
>>> ... but be careful to use parantheses when you want to clamp min and
>>> max at the same time:
>>> twoodle_array = (twoodle_array < max_val ) > min_val
>>
>> In that case I don't use parantheses either, because I think the
>> following "looks" nicer: ;-)
>>
>> twoodle_array = min_val > twoodle_array < max_val
>
> I agree with Kevin. Having nice looking programs is as important
> as having programs that work correctly. :-)
>
> The only problem with Kevin's approach is that I am usually
> clamping from some mininum value to some maximun-minus-one
> value. And this definitely does NOT do what you want:
>
> twoodle_array = min_val > twoodle_array < max_val - 1
>
> I've been bit so many times with this that I've given up
> all aesthetics and wrap those damn parentheses around anything
> that moves. :-(
>
> Happy Holidays,
>
> David
> --
Yup,
that's what I really intended to say/write. BTW: How about a "last
element" operator? I very often need something like
subdata = data[*,0:n_elements(data[0,*])-1]
which is not very aesthetic ;-) is it? It would just be great if one
could write something like
subdata = data[*,0:(*)-1] or anything with a similar short syntax
In this case the parantheses would serve to distinguish between "all
elements" and "last element". That's probably a little dangerous. Anyone
with a better idea?
Happy holidays,
Martin.
--
------------------------------------------------------------ -------
Dr. Martin Schultz
Department for Engineering&Applied Sciences, Harvard University
109 Pierce Hall, 29 Oxford St., Cambridge, MA-02138, USA
phone: (617)-496-8318
fax : (617)-495-4551
e-mail: mgs@io.harvard.edu
Internet-homepage: http://www-as.harvard.edu/people/staff/mgs/
------------------------------------------------------------ -------
|
|
|
Re: "clamping" an array to a maximum value? [message #13951 is a reply to message #13941] |
Mon, 21 December 1998 00:00  |
davidf
Messages: 2866 Registered: September 1996
|
Senior Member |
|
|
Kevin Ivory (Kevin@Ivory.de) writes:
> Martin Schultz wrote:
>> ... but be careful to use parantheses when you want to clamp min and
>> max at the same time:
>> twoodle_array = (twoodle_array < max_val ) > min_val
>
> In that case I don't use parantheses either, because I think the
> following "looks" nicer: ;-)
>
> twoodle_array = min_val > twoodle_array < max_val
I agree with Kevin. Having nice looking programs is as important
as having programs that work correctly. :-)
The only problem with Kevin's approach is that I am usually
clamping from some mininum value to some maximun-minus-one
value. And this definitely does NOT do what you want:
twoodle_array = min_val > twoodle_array < max_val - 1
I've been bit so many times with this that I've given up
all aesthetics and wrap those damn parentheses around anything
that moves. :-(
Happy Holidays,
David
--
David Fanning, Ph.D.
Fanning Software Consulting
Phone: 970-221-0438 E-Mail: davidf@dfanning.com
Coyote's Guide to IDL Progamming: http://www.dfanning.com/
Toll-Free IDL Book Orders: 1-888-461-0155
|
|
|
Re: "clamping" an array to a maximum value? [message #13952 is a reply to message #13951] |
Mon, 21 December 1998 00:00  |
Kevin Ivory
Messages: 71 Registered: January 1997
|
Member |
|
|
Martin Schultz wrote:
> ... but be careful to use parantheses when you want to clamp min and
> max at the same time:
> twoodle_array = (twoodle_array < max_val ) > min_val
In that case I don't use parantheses either, because I think the
following "looks" nicer: ;-)
twoodle_array = min_val > twoodle_array < max_val
Have nice holidays,
Kevin
--
Kevin Ivory Tel: +49 5556 979 434
Max-Planck-Institut fuer Aeronomie Fax: +49 5556 979 240
Max-Planck-Str. 2 mailto:Kevin@Ivory.de
D-37191 Katlenburg-Lindau, GERMANY http://ivory.de/
|
|
|
Re: "clamping" an array to a maximum value? [message #13955 is a reply to message #13951] |
Mon, 21 December 1998 00:00  |
Martin Schultz
Messages: 515 Registered: August 1997
|
Senior Member |
|
|
Kevin Ivory wrote:
> dEdmundson@Bigfoot.com wrote:
>> I have a 2d array of floats. All elements having
>> a value greater than max_val I want to set equal
>> to max_val. My solution is a rather complicated-
>> looking use of the "where" function.
>
> That's easy:
> twod_array = twod_array < max_val
>
> Kevin
> --
> Kevin Ivory Tel: +49 5556 979 434
> Max-Planck-Institut fuer Aeronomie Fax: +49 5556 979 240
> Max-Planck-Str. 2 mailto:Kevin@Ivory.de
> D-37191 Katlenburg-Lindau, GERMANY http://ivory.de/
... but be careful to use parantheses when you want to clamp min and
max at the same time:
twoodle_array = (twoodle_array < max_val ) > min_val
Martin.
--
------------------------------------------------------------ -------
Dr. Martin Schultz
Department for Engineering&Applied Sciences, Harvard University
109 Pierce Hall, 29 Oxford St., Cambridge, MA-02138, USA
phone: (617)-496-8318
fax : (617)-495-4551
e-mail: mgs@io.harvard.edu
Internet-homepage: http://www-as.harvard.edu/people/staff/mgs/
------------------------------------------------------------ -------
|
|
|
|
Re: "clamping" an array to a maximum value? [message #13958 is a reply to message #13951] |
Mon, 21 December 1998 00:00  |
Mark Buckley
Messages: 7 Registered: December 1998
|
Junior Member |
|
|
dEdmundson@Bigfoot.com wrote in message <75l3vi$nit$1@nnrp1.dejanews.com>...
>
>
> It's late here in Oz and my brain refuses to find an
> easy solution to the following seemingly trivial
> problem:
>
> I have a 2d array of floats. All elements having
> a value greater than max_val I want to set equal
> to max_val. My solution is a rather complicated-
> looking use of the "where" function.
a = a < maxval
where a is the array, should do it...
cheers,
Mark
|
|
|