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

Yes, given an array, `array`

, and a value, `item`

to search for, you can use `np.where`

as:

`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[0][0]][itemindex[1][0]]`

would be equal to your item and so would be:

`array[itemindex[0][1]][itemindex[1][1]]`

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)[0][0]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]),)`