我有两个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
可以找到的任何行的所有元素B
。在的行中有2个相同元素的地方B
,from的行也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()
丢弃所有重复的值。
郎朗坤
相关分类