[Numpy-discussion] argmax() indexes to value

Allan Haldane allanhaldane at gmail.com
Fri Nov 1 11:51:46 EDT 2019


my thought was to try `take` or `take_along_axis`:

   ind = np.argmin(a, axis=1)
   np.take_along_axis(a, ind[:,None], axis=1)

But those functions tend to simply fall back to fancy indexing, and are
pretty slow. On my system plain fancy indexing is fastest:

>>> %timeit a[np.arange(N),ind]
1.58 µs ± 18.1 ns per loop
>>> %timeit np.take_along_axis(a, ind[:,None], axis=1)
6.49 µs ± 57.3 ns per loop
>>> %timeit np.min(a, axis=1)
9.51 µs ± 64.1 ns per loop

Probably `take_along_axis` was designed with uses like yours in mind,
but it is not very optimized.

(I think numpy is lacking a category of efficient
indexing/search/reduction functions, like 'findfirst', 'groupby',
short-circuiting any_*/all_*/nonzero, the proposed oindex/vindex, better
gufunc broadcasting. There is slow but gradual infrastructure work
towards these, potentially).

Cheers,
Allan

On 10/30/19 11:31 PM, Daniele Nicolodi wrote:
> On 30/10/2019 19:10, Neal Becker wrote:
>> max(axis=1)?
> 
> Hi Neal,
> 
> I should have been more precise in stating the problem. Getting the
> values in the array for which I'm looking at the maxima is only one step
> in a more complex piece of code for which I need the indexes along the
> second axis of the array. I would like to avoid to have to iterate the
> array more than once.
> 
> Thank you!
> 
> Cheers,
> Dan
> 
> 
>> On Wed, Oct 30, 2019, 7:33 PM Daniele Nicolodi <daniele at grinta.net
>> <mailto:daniele at grinta.net>> wrote:
>>
>>     Hello,
>>
>>     this is a very basic question, but I cannot find a satisfying answer.
>>     Assume a is a 2D array and that I get the index of the maximum value
>>     along the second dimension:
>>
>>     i = a.argmax(axis=1)
>>
>>     Is there a better way to get the value of the maximum array entries
>>     along the second axis other than:
>>
>>     v = a[np.arange(len(a)), i]
>>
>>     ??
>>
>>     Thank you.
>>
>>     Cheers,
>>     Daniele
>>     _______________________________________________
>>     NumPy-Discussion mailing list
>>     NumPy-Discussion at python.org <mailto:NumPy-Discussion at python.org>
>>     https://mail.python.org/mailman/listinfo/numpy-discussion
>>
>>
>> _______________________________________________
>> NumPy-Discussion mailing list
>> NumPy-Discussion at python.org
>> https://mail.python.org/mailman/listinfo/numpy-discussion
>>
> 
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion
> 



More information about the NumPy-Discussion mailing list