我有两个 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) …
我想检查数组是否是数组b的子集a。子集我的意思是我想检查是否b在a.
这是我的代码:
import numpy as np
a = np.array([[1,7,9],[8,3,12],[101,-74,0.5]])
b = np.array([[1,9],[8,12],[101,0.5]])
print a
print b
Run Code Online (Sandbox Code Playgroud)
这是输出
数组 a
[[ 1. 7. 9. ]
[ 8. 3. 12. ]
[ 101. -74. 0.5]]
Run Code Online (Sandbox Code Playgroud)
数组 b
[[ 1. 9. ]
[ 8. 12. ]
[ 101. 0.5]]
Run Code Online (Sandbox Code Playgroud)
有没有办法检查 b 是否是 a 的子集?
编辑:附加信息:
根据下面的评论,我应该澄清一下,我需要知道数组 b 是否是数组 a 的子集 - 如果子集中缺少一个元素,那么我正在寻找一种方法来检查这一点。我不需要指示元素在子集中的哪个位置丢失,而只是知道它丢失了。如果可以提供有关缺失元素的其他信息,那么这将是一个奖励,但这不是硬性要求。很抱歉没有早点解决这个问题。
我将问题表述为子集的理由是,如果一个数组是另一个数组的子集,那么这对我来说意味着子集数组的所有值都存在于更大的数组中。