In [8]: a = np.array([[1,2],
[3,4],
[6,4],
[5,3],
[3,5]])
In [9]: b = {(1,2),(6,4)}
In [10]: filter(lambda x: tuple(a[x]) in b, range(len(a)))
Out[10]: [0, 2]
In [150]: timeit np.nonzero((a[:,:,None,None]==np.array(list(b))[:,:]).any(axis=-1).any(axis=-1).all(axis=-1))[0]
10000 loops, best of 3: 52.2 µs per loop
首先,将集合转换为NumPy数组-
然后,基于^{} ,您将有三种方法。让我们用第二种方法来提高效率-
^{pr2}$样本运行-
您可以使用过滤器:
作为参考,直接列表理解(循环)答案:
基本上与
^{pr2}$filter
方法相同:但这是一个玩具的例子,所以计时没有意义。在
如果
a
还不是数组,由于创建数组的开销,这些列表方法将比数组方法快。在有一些numpy集操作,但它们适用于1d阵列。我们可以通过将二维阵列转换为一维结构来解决这个问题。在
有一个使用
np.void
的版本,但是它更容易记住和使用这个'i,i'数据类型。在所以这是可行的:
^{4}$但它比迭代要慢得多:
正如其他最近的
union
问题所讨论的,np.in1d
使用了几种策略。一种是基于广播和where
。另一个使用unique
、concatenation
、sorting
和区别。在一个广播解决方案(是的,很混乱),但比
in1d
快。在相关问题 更多 >
编程相关推荐