【发布时间】:2018-12-13 16:54:47
【问题描述】:
我需要在一个更大的 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)
我正在寻找一种更快的方法来查找数组b 中完整数组a 的所有索引。快速方法还应该允许其他比较功能,例如找出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)
【问题讨论】: