Это продолжение до предыдущего вопроса . Если у меня есть NumPy массив [0, 1, 2, 2, 3, 4, 2, 2, 5, 5, 6, 5, 5, 2, 2]
для каждой повторяющейся последовательности (начиная с каждого индекса), есть ли быстрый способ найти все совпадения этой повторяющейся последовательности и вернуть индекс для этих совпадений?
Здесь повторяющимися последовательностями являются [2, 2]
и [5, 5]
(обратите внимание, что длина повторения указывается пользователем, но будет такой же длины и может быть намного больше 2). Повторы можно найти в [2, 6, 8, 11, 13] следующим образом:
def consec_repeat_starts(a, n):
N = n-1
m = a[:-1]==a[1:]
return np.flatnonzero(np.convolve(m,np.ones(N, dtype=int))==N)-N+1
Но для каждого уникального типа последовательности повтора (т. Е. [2, 2]
и [5, 5]
) я хочу вернуть что-то вроде повторения, за которым следуют индексы, где расположен повтор:
[([2, 2], [2, 6, 13]), ([5, 5], [8, 11])]
Обновление
Дополнительно, учитывая последовательность повторений, вы можете вернуть результаты из второго массива. Итак, ищите [2, 2]
и [5, 5]
in:
[2, 2, 5, 5, 1, 4, 9, 2, 5, 5, 0, 2, 2, 2]
И функция вернет:
[([2, 2], [0, 11, 12]), ([5, 5], [2, 8]))]