我有两个2D numpy数组,例如:
A = numpy.array([[1, 2, 4, 8], [16, 32, 32, 8], [64, 32, 16, 8]])
和
B = numpy.array([[1, 2], [32, 32]])
我想要得到所有包含
A_filtered = [[1, 2, 4, 8], [16, 32, 32, 8]]
我可以控制值的表示方式,因此我选择二进制表示中只有一个位置为
在numpy中如何以高效的方式实现这一点?
A = numpy.array([[1, 2, 4, 8], [16, 32, 32, 8], [64, 32, 16, 8]])
和
B = numpy.array([[1, 2], [32, 32]])
我想要得到所有包含
B
的任何一行中的所有元素的A
的行。当B
的一行中有2个相同的元素时,A
的行必须至少包含2个相同的元素。在我的例子中,我想要实现这个目标:A_filtered = [[1, 2, 4, 8], [16, 32, 32, 8]]
我可以控制值的表示方式,因此我选择二进制表示中只有一个位置为
1
的数字(例如:0b00000001
和0b00000010
等)。这样,我可以使用np.logical_or.reduce()
函数轻松检查所有类型的值是否在一行中,但我无法检查A
行中相同元素的数量是否大于或等于。我真的希望我能避免简单的for
循环和数组的深复制,因为对于我来说性能是非常重要的方面。在numpy中如何以高效的方式实现这一点?
更新:
这里的一个解决方案可能有效,但我认为性能是我关心的一个重要问题,A
可能非常大(>300000行),而 B
可以适中(>30):
[set(row).issuperset(hand) for row in A.tolist() for hand in B.tolist()]
更新2:
set()
解决方案不起作用,因为 set()
会删除所有重复值。