有类似的问题已经在SO上提出,但它们具有更具体的限制,并且它们的答案不适用于我的问题。
通常来说,确定任意numpy数组是否是另一个数组的子集的最pythonic方法是什么? 更具体地说,我有一个大约20000x3的数组,我需要知道完全包含在集合中的1x3元素的索引。 更普遍地说,下面的写法是否更符合python风格:
master = [12, 155, 179, 234, 670, 981, 1054, 1209, 1526, 1667, 1853] # some indices of interest
triangles = np.random.randint(2000, size=(20000, 3)) # some data
for i, x in enumerate(triangles):
if x[0] in master and x[1] in master and x[2] in master:
print i
对于我的使用情况,我可以安全地假设len(master) << 20000。(因此,也可以安全地假设master已排序,因为这很便宜。)
row in searchKey
并不能判断row是否为searchKey的子集。在这个例子中,它总是返回一个由False组成的数组。 - aestrivexset_searchKey = set(searchKey); [set_searchKey.issuperset(row) for row in x]
,这样你就不需要在每次迭代中将searchkey转换为集合了。另外注意,x不需要转换为列表。 - Bi RicoTrue
的第一行,有更好的方法吗? - Filippo Bistaffa