How does Python reference and store array elements?
First off, we need to distinguish between lists and tuples vs. arrays.
In Python, lists and tuples cannot have multiple dimensions,
in the sense of an array.
You can create lists where each element is another list,
and so on, but individual elements in such lists cannot be addressed
by traditional "(i,j)" array indexing.
To create multidimensional array objects, you'll need to use
a module or package like Numeric
or array
.
Two-dimensional (i.e. rank 2) Python Numeric
arrays
(which in this discussion is what I'll mean by "array")
are indexed "row-column":
the first index gives the row number and
the second index gives the column number.
Thus, array A[i,j]
gives the element in the row i
and column j
of rank 2 array A
.
Python array indexing is the same
as in MATLAB,
but different than in
IDL
(where the first index gives the
column number and the second index gives the row number).
However, contiguous Python Numeric
arrays
are stored in
(By the way, in Python, you can have noncontiguous arrays; this regularly
can happen when you slice up a large array. Generally you won't
have to care whether the array is contiguous or not, as Python
will take care of the details of array access for you.
If you want to turn a noncontiguous array into
a contiguous array, use the Numeric.copy
method.)
Numeric
array indices are zero-based
(like lists and tuples) in Python. Thus, the first element
in an array or tuple has an index 0, while the last element
in a row of N elements has an index N-1.
IDL array indices are also zero-based, while MATLAB
indices are one-based, i.e. the first element has index 1.
Confused? :)
I sure am :)
.
(Note the above discussion applies to rank 2 arrays. Higher dimension arrays have an additional quirk, which I'll describe another day when I have time.)