[Numpy-discussion] Find indices of largest elements

Keith Goodman kwgoodman at gmail.com
Wed Apr 14 11:49:58 EDT 2010


On Wed, Apr 14, 2010 at 8:16 AM, Nikolaus Rath <Nikolaus at rath.org> wrote:
> Hello,
>
> How do I best find out the indices of the largest x elements in an
> array?
>
> Example:
>
> a = [ [1,8,2], [2,1,3] ]
> magic_function(a, 2) == [ (0,1), (1,2) ]
>
> Since the largest 2 elements are at positions (0,1) and (1,2).

Here's a quick way to rank the data if there are no ties and no NaNs:

>> shape = (3,2)
>> x = np.random.rand(*shape)
>> x
array([[ 0.83424288,  0.17821326],
       [ 0.62718311,  0.63514286],
       [ 0.18373934,  0.90634162]])
>> r = x.reshape(-1).argsort().argsort().reshape(shape)
>> r
array([[4, 0],
       [2, 3],
       [1, 5]])

To find the indices you can use where:

>> r < 2
array([[False,  True],
       [False, False],
       [ True, False]], dtype=bool)
>> np.where(r < 2)
   (array([0, 2]), array([1, 0]))

...but the indices will not be in order.



More information about the NumPy-Discussion mailing list