我想知道是否有任何内置方法可以找到包含在另一个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
。或者确定他们的索引。
答案 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
数组可行,则替代的,可能更有效的解决方案: