У меня есть два несортированных ndarrays со следующей структурой:
a1 = np.array([0,4,2,3],[0,2,5,6],[2,3,7,4],[6,0,9,8],[9,0,6,7])
a2 = np.array([3,4,2],[0,6,9])
Я хотел бы найти все индексы a1, где каждая строка a2 находится в a1, а также внутри позиции a1:
result = [[0,[3,1,2]],[2,[1,3,0]],[3,[1,0,2]],[4,[1,2,0]]
В этом примере a2 [0] находится в a1 в положении 0 и 2 в положении a1 в 3,1,2 и 1,3,0.Для a2 [1] в позициях 3 и 4 в пределах a1 в позициях 1,0,2 и 1,2,0.
Каждая строка a2 появляется дважды в a1.а1 имеет минимум 1 миллионряды, а2 около 10000.Таким образом, алгоритм должен быть также довольно быстрым (если возможно).
До сих пор я думал об этом подходе:
big_res = []
for r in xrange(len(a2)):
big_indices = np.argwhere(a1 == a2[r])
small_res = []
for k in xrange(2):
small_indices = [i for i in a2[r] if i in a1[big_indices[k]]]
np.append(small_res, small_indices)
combined_res = [[big_indices[0],small_res[0]],[big_indices[1],small_res[1]]]
np.append(big_res, combined_res)