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

时间:2018-03-24 15:05:56

标签: python python-3.x multidimensional-array

我想知道是否有任何内置方法可以找到包含在另一个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]arr2中唯一包含arr1的数组a_content 。或者确定他们的索引。

3 个答案:

答案 0 :(得分:0)

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

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]

答案 1 :(得分:0)

如果您使用套装:

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

c将是:

[2, "B"]

答案 2 :(得分:0)

一种方法是在将每行映射到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. Get intersecting rows across two 2D numpy arrays
  2. Find arrays of ndarray that are in another ndarray - Python