On 04/09/2014 01:24 PM, John Ladasky wrote:

I would like to build a multi-dimensional array that allows numpy-style
 indexing and, ideally, uses Python's familiar square-bracket and slice
 notations.

For example, if I declare a two-dimensional array object, x, then x[4,7]
 retrieves the element located at the 4th row and the 7th column.  If I
 ask for x[3:6,1:3], I get a 3 x 2 array object consisting of the inter-
section of the 3rd-5th rows, and the 1st-2nd columns, of x.

In this case I'm not allowed to use numpy, I have to restrict myself to
 the standard library.  I thought that I might achieve the desired behavior
 by defining an object with specific __getitem__ and/or __getslice__ methods.
However, the documentation of these methods that I am reading suggests that
 the arguments are pre-parsed into certain formats which may not allow me to
 do things numpy's way.  Is this true?

Nope. Whatever you put between the square brackets is what gets passed into __getitem__; the only caveat is that anything with : will be turned into a slice:

Python 2.7.3 (default, Sep 26 2012, 21:51:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
--> class GetIndex(object):
...   def __getitem__(self, thing):
...     print thing
...     return None
...
--> test = GetIndex()

--> test[1]
1

--> test [1,2]
(1, 2)

--> test[1:3, 4:5]
(slice(1, 3, None), slice(4, 5, None))

--> test[range(3)]
[0, 1, 2]

--
~Ethan~
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to