我需要在一个更大的 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
arrays:
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
and 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)