# Is there a NumPy function to return the first index of something in an array?

### Question

I know there is a method for a Python list to return the first index of something:

``````>>> l = [1, 2, 3]
>>> l.index(2)
1
``````

Is there something like that for NumPy arrays?

1
410
3/29/2019 2:50:05 AM

Yes, here is the answer given a NumPy array, `array`, and a value, `item`, to search for:

``````itemindex = numpy.where(array==item)
``````

The result is a tuple with first all the row indices, then all the column indices.

For example, if an array is two dimensions and it contained your item at two locations then

``````array[itemindex][itemindex]
``````

would be equal to your item and so would

``````array[itemindex][itemindex]
``````

numpy.where

477
9/12/2018 8:29:41 PM

If you need the index of the first occurrence of only one value, you can use `nonzero` (or `where`, which amounts to the same thing in this case):

``````>>> t = array([1, 1, 1, 2, 2, 3, 8, 3, 8, 8])
>>> nonzero(t == 8)
(array([6, 8, 9]),)
>>> nonzero(t == 8)
6
``````

If you need the first index of each of many values, you could obviously do the same as above repeatedly, but there is a trick that may be faster. The following finds the indices of the first element of each subsequence:

``````>>> nonzero(r_[1, diff(t)[:-1]])
(array([0, 3, 5, 6, 7, 8]),)
``````

Notice that it finds the beginning of both subsequence of 3s and both subsequences of 8s:

[1, 1, 1, 2, 2, 3, 8, 3, 8, 8]

So it's slightly different than finding the first occurrence of each value. In your program, you may be able to work with a sorted version of `t` to get what you want:

``````>>> st = sorted(t)
>>> nonzero(r_[1, diff(st)[:-1]])
(array([0, 3, 5, 7]),)
``````