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

Home » Public Forums » archive » Negative array indices
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
Negative array indices [message #73811] Thu, 02 December 2010 13:54 Go to next message
b_gom is currently offline  b_gom
Messages: 105
Registered: April 2003
Senior Member
I've been stumbling around trying to figure out uses for the negative
array indexing in IDL 8. As usual, the documentation doesn't fully
describe the logic behind the syntax rules.

One rule that I've discovered is that negative array indices shouldn't
be thought of as indices 'rolling over' as you cross zero. For
example:
If x=findgen(10), then x[-1] is the same as x[9], and x[-10] is the
same as x[0], but x[-11] isn't allowed. I can see why this follows
from not allowing positive indices greater than the number of elements
in x.

I guess this leads to this behaviour:
IDL> x=findgen(10)
IDL> print,x[-4:0]
% Illegal subscript range: X.

because this gets translated to:
IDL> print,x[6,0]
which isn't allowed.

Now, on to the real question. Why does the following not work:

IDL> print,x[1:3]
1.00000 2.00000 3.00000
IDL> print,x[[1,2,3]]
1.00000 2.00000 3.00000
IDL> print,x[-3:-1]
7.00000 8.00000 9.00000
IDL> print,x[[-3,-2,-1]]
0.000000 0.000000 0.000000
Re: Negative array indices [message #73902 is a reply to message #73811] Thu, 02 December 2010 17:40 Go to previous message
penteado is currently offline  penteado
Messages: 866
Registered: February 2018
Senior Member
Administrator
On Dec 2, 7:54 pm, b_gom <b_...@hotmail.com> wrote:
> I guess this leads to this behaviour:
> IDL> x=findgen(10)
> IDL> print,x[-4:0]
> % Illegal subscript range: X.
>
> because this gets translated to:
> IDL> print,x[6,0]
> which isn't allowed.

Not allowed just because you are trying to decrease the index with a
positive stride (it will never get to 0 starting from 5 and adding
increments of 1). This does work:

IDL> x=findgen(10)
IDL> print,x[-4:0:-1]
6.00000 5.00000 4.00000 3.00000 2.00000
1.00000 0.00000
IDL> print,x[6:0:-1]
6.00000 5.00000 4.00000 3.00000 2.00000
1.00000 0.00000
Re: Negative array indices [message #73903 is a reply to message #73811] Thu, 02 December 2010 17:28 Go to previous message
penteado is currently offline  penteado
Messages: 866
Registered: February 2018
Senior Member
Administrator
On Dec 2, 10:35 pm, b_gom <b_...@hotmail.com> wrote:
> Another example is the new list and hash objects. The documentation
> does a good job describing what their methods do, but doesn't really
> explain what they are better for than arrays and structures, and what
> performance trade-offs to be aware of. I guess that is where your new
> book comes in..

I had not even noticed that the documentation did not mention
motivation. Maybe all the many requests for lists, hashes and negative
indices over the years (mine, for one) left them with the impression
that everyone already wanted them. Negative indices are a good
syntatic sugar (basically and abbreviation for things like
a[n_elements(a)-1] and b[0,(size(b,/dimensions))[1]-1]), and I find
them very useful, but they are not even close in importance to lists
and hashes. I was leaving IDL for Python because of the lack of lists
and hashes.

In nearly every program I write I need a dynamic, possibly
heterogeneous container. Without lists, it is too much work to have to
predict or alter the dimensions of arrays, or handle (particularly,
read) several layers of indirection through nested pointer arrays. And
I usually have a bunch of different variables to keep associated,
where structures are too awkward to use because their are static.
Usually because the code needs to deal with data that can come in
varied forms, not known at compile time (being a dynamically typed
language is one the main factors in my choice to use IDL).
Re: Negative array indices [message #73906 is a reply to message #73811] Thu, 02 December 2010 16:35 Go to previous message
b_gom is currently offline  b_gom
Messages: 105
Registered: April 2003
Senior Member
On Dec 2, 3:50 pm, David Fanning <n...@dfanning.com> wrote:
> It's always a bad sign when you are stumbling around trying
> to figure out how to use a feature you never realized you
> needed before. Or are you trying to write a book, too?

No, that market has already been cornered.

It was more a case of: 'Ah, this might be a situation where those new
negative indices I read about might simplify things', followed quickly
by the realisation that I didn't really understand what they were good
for.

In general, it would be helpful if the IDL documentation went a bit
further than just describing the syntax and calling sequence for the
operators, commands and routines, and added a paragraph or two for
each saying "And here's what it is\isn't good for:"

Another example is the new list and hash objects. The documentation
does a good job describing what their methods do, but doesn't really
explain what they are better for than arrays and structures, and what
performance trade-offs to be aware of. I guess that is where your new
book comes in..
Re: Negative array indices [message #73908 is a reply to message #73811] Thu, 02 December 2010 14:50 Go to previous message
David Fanning is currently offline  David Fanning
Messages: 11724
Registered: August 2001
Senior Member
b_gom writes:

> I've been stumbling around trying to figure out uses for the negative
> array indexing in IDL 8. As usual, the documentation doesn't fully
> describe the logic behind the syntax rules.

It's always a bad sign when you are stumbling around trying
to figure out how to use a feature you never realized you
needed before. Or are you trying to write a book, too?

Cheers,

David



--
David Fanning, Ph.D.
Fanning Software Consulting, Inc.
Coyote's Guide to IDL Programming: http://www.dfanning.com/
Sepore ma de ni thui. ("Perhaps thou speakest truth.")
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: New Graphics Challange
Next Topic: Convolution Kernel

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

Current Time: Fri Oct 10 23:39:18 PDT 2025

Total time taken to generate the page: 1.35989 seconds