Index of element in NumPy array

Marc Ortiz picture Marc Ortiz · Aug 6, 2013 · Viewed 271.6k times · Source

In Python we can get the index of a value in an array by using .index().

But with a NumPy array, when I try to do:

decoding.index(i)

I get:

AttributeError: 'numpy.ndarray' object has no attribute 'index'

How could I do this on a NumPy array?

Answer

Saullo G. P. Castro picture Saullo G. P. Castro · Aug 6, 2013

Use np.where to get the indices where a given condition is True.

Examples:

For a 2D np.ndarray called a:

i, j = np.where(a == value) # when comparing arrays of integers

i, j = np.where(np.isclose(a, value)) # when comparing floating-point arrays

For a 1D array:

i, = np.where(a == value) # integers

i, = np.where(np.isclose(a, value)) # floating-point

Note that this also works for conditions like >=, <=, != and so forth...

You can also create a subclass of np.ndarray with an index() method:

class myarray(np.ndarray):
    def __new__(cls, *args, **kwargs):
        return np.array(*args, **kwargs).view(myarray)
    def index(self, value):
        return np.where(self == value)

Testing:

a = myarray([1,2,3,4,4,4,5,6,4,4,4])
a.index(4)
#(array([ 3,  4,  5,  8,  9, 10]),)