Если вам нужен первый индекс каждого из многих значений, вы, очевидно, могли бы повторить то же самое, что описано выше, повторно, но есть трюк, который может быть быстрее. Ниже приведены индексы первого элемента каждой подпоследовательности:
Обратите внимание, что она находит начало обеих подпоследовательностей по 3 секунды и обеих подпоследовательностей по 8 секунд:
[1, 1, 1, 2, 2, 3, 8, 3, 8, 8]
Таким образом, это немного отличается от поиска первого вхождения каждого значения. В вашей программе вы можете работать с отсортированной версией t, чтобы получить то, что вы хотите:
Вы также можете преобразовать массив NumPy в list in the air и получить его индекс. Например,
l = [1,2,3,4,5] # Python list a = numpy.array(l) # NumPy array i = a.tolist().index(2) # i will return index of 2 print i
Он выведет 1.
Ответ 4
Просто добавлю очень производительную и удобную альтернативу numba, основанную на np.ndenumerate поиске первого индекса:
from numba import njit import numpy as np
@njit defindex(array, item): for idx, val in np.ndenumerate(array): if val == item: return idx # If no item was found return None, other return types might be a problem due to # numbas type inference.
Это довольно быстро и естественно работает с многомерными массивами:
Это может быть намного быстрее (потому что это приводит к короткому замыканию операции), чем любой подход, использующий np.where или np.nonzero.
Однако np.argwhere также можно было бы изящно работать с многомерными массивами (вам нужно было бы вручную преобразовать его в кортеж и это не короткое замыкание), но это завершилось бы неудачей, если совпадение не найдено: