查找位于另一个 ndarray - Python 中的 ndarray 数组



我想知道是否有任何内置方法来查找包含在另一个ndarray中的ndarray数组。即

arr1 = [[1,2], [2,9], [3,7], [5,11], [32,5], [11,4], [89,3], [37,5]]

arr2 = [[12,44], [2,9], [125,3], [37,5]]

我想知道是否有任何内置方法来识别[2,9][37,5]是包含在arr1中的唯一arr2数组。或者识别它们的索引。

您可以使用集合和元组来执行此操作,使用:

arr1 = [[1,2], [2,9], [3,7], [5,11], [32,5], [11,4], [89,3], [37,5]]
arr2 = [[12,44], [2,9], [125,3], [37,5]]
set1 = {tuple(i) for i in arr1}
set2 = {tuple(i) for i in arr2}
arr3 = [list(i) for i in set1 & set2]

但是仅仅使用列表理解会简单得多

arr3 = [i for i in arr1 if i in arr2]

如果使用集合:

a = [1,2,3,4,"B"]
b = [2, "B", 5]
sa = set(a)
sb = set(b)
c = list(sa.intersection(sb))

c将是:

[2, "B"]

一种方法是在将每行映射到tuple之后,使用2个列表的行的交集。

之所以

需要转换为 tuple,是因为元组是不可变和可哈希的。因此,它们可以包含在set中,而列表不能。

arr1 = [[1,2], [2,9], [3,7], [5,11], [32,5], [11,4], [89,3], [37,5]]
arr2 = [[12,44], [2,9], [125,3], [37,5]]
res = set(map(tuple, arr1)) & set(map(tuple, arr2))
# {(2, 9), (37, 5)}

如果需要,将结果转换回列表:

res2 = list(map(list, res))
# [[37, 5], [2, 9]]

如果numpy阵列可行,则替代的、可能更有效的解决方案:

  1. 获取跨两个 2D 数字数组的相交行
  2. 查找位于另一个 ndarray 中的 ndarray 数组 - Python

最新更新