Мне нужно найти маленький массив NumPy в гораздо большем массиве NUMPY.Например:
import numpy as np
a = np.array([1, 1])
b = np.array([2, 3, 3, 1, 1, 1, 8, 3, 1, 6, 0, 1, 1, 3, 4])
Функция
find_numpy_array_in_other_numpy_array(a, b)
должна возвращать индексы
[3, 4, 11]
, которые представляют место, где полный массив NumPy a
появляется в полной NUMPYмассив b
.
Существует грубый подход к этой проблеме, который медленен при работе с очень большими b
массивами:
ok = []
for idx in range(b.size - a.size + 1):
if np.all(a == b[idx : idx + a.size]):
ok.append(idx)
Я ищу гораздо более быстрый путьнайти все индексы полного массива a
в массиве b
.Быстрый подход также должен позволять другие функции сравнения, например, для нахождения наихудшей разницы между a
и b
:
diffs = []
for idx in range(b.size - a.size + 1):
bi = b[idx : idx + a.size]
diff = np.nanmax(np.abs(bi - a))
diffs.append(diff)