我有两个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()丢弃所有重复的值。
白板的微信
郎朗坤
随时随地看视频慕课网APP
相关分类