[Numpy-discussion] ndarray __getattr__ to perform __getitem__
Robert Kern
robert.kern at gmail.com
Thu Oct 28 17:29:32 EDT 2010
On Thu, Oct 28, 2010 at 15:17, Ian Stokes-Rees
<ijstokes at hkl.hms.harvard.edu> wrote:
> I have an ndarray with named dimensions. I find myself writing some
> fairly laborious code with lots of square brackets and quotes. It seems
> like it wouldn't be such a big deal to overload __getattribute__ so
> instead of doing:
>
> r = genfromtxt('results.dat',dtype=[('a','int'), ('b', 'f8'),
> ('c','int'), ('d', 'a20')])
> scatter(r[r['d'] == 'OK']['a'], r[r['d'] == 'OK']['b'])
>
> I could do:
>
> scatter(r[r.d == 'OK'].a, r[r.d == 'OK'].b)
>
> which is really a lot clearer. Is something like this already possible
> somehow?
See recarray which uses __getattribute__.
> Is there some reason not to map __getattr__ to __getitem__?
Using __getattribute__ tends to slow down almost all operations on the
array substantially. Perhaps __getattr__ would work better, but all of
the methods and attributes would mask the fields. If you can find a
better solution that doesn't have such an impact on normal
performance, we'd be happy to hear it.
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
-- Umberto Eco
More information about the NumPy-Discussion
mailing list