b_gom
2010-12-02 21:54:41 UTC
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
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