On Tue, Feb 14, 2012 at 4:03 AM, Francesc Alted <franc...@continuum.io> wrote:
> On Feb 14, 2012, at 1:50 AM, Wes McKinney wrote:
> [clip]
>> But:
>>
>> In [40]: timeit hist[i, j]
>> 10000 loops, best of 3: 32 us per loop
>>
>> So that's roughly 7-8x slower than a simple Cython method, so I
>> sincerely hope it could be brought down to the sub 10 microsecond
>> level with a little bit of work.
>
> I vaguely remember this has shown up before.  My hunch is that indexing in 
> NumPy is so powerful, that it has to check for a lot of different values for 
> indices (integers, tuples, lists, arrays…), and that it is all these checks 
> what is taking time.  Your Cython wrapper just assumed that the indices where 
> integers, so this is probably the reason why it is that much faster.
>
> This is not to say that indexing in NumPy could not be accelerated, but it 
> won't be trivial, IMO.
>

Given that __getitem__ and __setitem__ receive a 2-tuple of
1-dimensional integer arrays, should be pretty simple (dare I say
trivial? :) ) to optimize for this use case? The abysmal performance
of of __getitem__ and __setitem__ with 1d integer arrays is pretty
high on my list of annoyances with NumPy (especially when take and put
are so much faster), so you guys may see a pull request from me
whenever I can spare the time to hack on it (assuming you don't beat
me to it)!

> -- Francesc Alted
>
>
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to