Это кажется довольно сложной задачей. Позвольте мне объяснить сценарий небольшими примерами.
Рассмотрим 5 массивов a1
, a2
, a3
, a4
и a5
. Эти массивы не важны, я упоминаю их для полноты картины. Рассмотрим 4 массива совпадений m1
, m2
, m3
, m4
размеров 10
, 9
, 11
и 10
. Каждый массив в основном сообщает вам, какой элемент первого массива a<i>
соответствует второму a<i+1>
.
Например. if m1 = [-1, 0, 2, -1, 3, 8, 7, -1, 9, 5]
Это означает, что элемент 0 th из a1
не имеет соответствия, 1 st из a1
совпадает с 0 th элемент из a2
и элемент 2 nd из a1
совпадает с элементом 2 nd из a2
.
Таким образом, размер m1
= размер a1
и размер m2
= размер a2
et c.
Аналогично, если m2 = [-1, 0, 2, 6, 3, 8, 7, -1, 9, 5]
устанавливает соответствующие совпадения между a2
и a3
.
Вот мой вопрос. Можно ли узнать, какой элемент из a1
соответствует элементам из a3
? Моя конечная цель - установить sh это соответствие между a1
и a5
.
Для a1
- a3
мой сопоставленный новый массив будет m = [-1, -1, 2, -1, 6, 9, -1, -1, 5, 8]
. Чтобы объяснить, как я получаю этот массив m
, например. m[4] = m2[m1[4]]
.
Какой наиболее эффективный способ сделать это?
Несколько примечаний:
-
-1
- это просто индикатор, который совпадения нет, и его можно заменить чем-нибудь, что упростило бы проблему. из-за правил индексации Python / numpy, m2[-1]
будет считаться последним элементом m2
, что в данном случае нежелательно - Это просто игрушечный пример, и мои массивы совпадают с массивами будет иметь размеры ~ 2000 элементов.
Если кому-то интересно его применение, или если дополнительная информация может помочь, это относится к сопоставлению функций изображений. Используя opencv
, я извлекаю orb
функции и выполняю сопоставление функций между тремя изображениями I 1 , I 2 и I 3 . У меня есть соответствия между I 1 -I 2 и I 2 -I 3 , и я хотел бы вычислить совпадения между I 1 -I 3 косвенно с использованием двух вышеуказанных соответствий.