2013-08-06 3 views
17

В Python мы можем получить индекс значения в массиве с помощью .index(). Как я могу сделать это с помощью массива NumPy?Указатель элемента в массиве NumPy

Когда я пытаюсь сделать

decoding.index(i) 

это говорит о том, что библиотека NumPy не поддерживает эту функцию. Есть ли способ сделать это?

ответ

27

Используйте np.where, чтобы получить индексы, в которых задано условие True.

Примеры:

Для 2D np.ndarray:

i,j = np.where(a==value) 

Для 1D-массива:

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

Если также работает для условий, таких как >=, <=, != и так далее .. .

Вы можете также создать подкласс np.ndarray с index() методом:

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) 

Тестирование:

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

Я разрываюсь между этими двумя способами реализации индекса массива NumPy:

idx = list(classes).index(var) 
idx = np.where(classes == var) 

Оба принимают одинаковое количество символов, но второй метод возвращает int, а не nparray.

Смежные вопросы