1

我有两个大小为 (m,2) 和 (n,2) 的数组 A 和 B。A 和 B 将非零元素的索引存储在两个不同的矩阵 P 和 Q 中。

我想找到匹配的索引,所以我可以找到哪些索引存储非零值。

4

1 回答 1

0

不能 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]

然后通过以下方式执行循环:

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

编辑2:

我可能误解了这个问题。如果数组中的元素是二维坐标/索引,那么你只需要这个:

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]]
于 2020-03-26T16:07:59.317 回答