По строкам сравнивают два массива неравных размеров, но одинаковых размеров. (Python) - PullRequest
1 голос
/ 25 марта 2020

У меня есть два массива A и B размеров (m, 2) и (n, 2). A и B хранят индексы ненулевых элементов в двух разных матрицах P и Q.

Я хочу найти совпадающие индексы, чтобы я мог найти, какие индексы хранят ненулевые значения.

1 Ответ

0 голосов
/ 26 марта 2020

Не уверен на 100%, что это то, что вы ищете, так как вы не дали пример ввода и вывода, но вот что, я думаю, вы хотите. По сути, цикл по каждому элементу в первом массиве и поиск, существует ли этот элемент во втором массиве. Затем выровняйте выходной массив.

a = [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]]
b = [[5,7],[2,9],[13,12]]

np.shape(a)  #(6,2)
np.shape(b)  #(3,2)

# Find items common to both
c = [[[item for item in a[i] if item in b[j]] for i in range(len(a))] for j in range(len(b))]

# [[[], [], [5], [7], [], []],
#  [[2], [], [], [], [9], []],
#  [[], [], [], [], [], [12]]]

# Remove empties and flatten
c = [item for elements in c for items in elements for item in items if item != []]
#  [5, 7, 2, 9, 12]

РЕДАКТИРОВАТЬ:

Возможно, более удобный для читателя метод - сначала сгладить a и b:

a_f = [item for items in a for item in items]
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

b_f = [item for items in b for item in items]
# [5, 7, 2, 9, 13, 12]

Затем выполните l oop через:

c = [item for item in a_f if item in b_f]
# [2, 5, 7, 9, 12]

EDIT2:

Возможно, я неправильно понял вопрос. Если элементы в массивах являются двумерными координатами / признаками, то вам просто нужно это:

a = [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]]
b = [[5,6],[1,14],[8,7],[3,4]]

c = [item for item in a if item in b]
#  [[3, 4], [5, 6]]
...