Для этого не существует простого простого решения.Однако то, что вы можете сделать, если вам действительно нужно, чтобы это было быстро, - это использовать numba :
Функция find_first
в основном делает то, что вы делаете с циклом for.Но так как вы используете numba, метод компилируется, таким образом, намного быстрее.Затем вы просто применяете метод к каждой партии, используя np.apply_along_axis
:
import numpy as np
from numba import jit
@jit(nopython=True)
def find_first(seq, arr):
"""return the index of the first occurence of item in arr"""
for i in range(len(arr)-2):
if np.all(seq == arr[i:i+3]):
return i
return -1
# construct test array
test = np.round(np.random.random((64,400)))
# this will give you the array of indices
np.apply_along_axis(lambda m: find_first(np.array([1,1,1]), m), axis=1, arr = test)
Я изменил метод с этот ответ