这与我之前的问题有关:Elementwise logical comparison of numpy arrays
我有两个随机整数的numpy数组
A=np.random.randint(Q,size=(N,M))
B=np.random.randint(Q,size=(1,M))
我需要测试A中的任何行是否具有多于0且少于M个共同元素与B元素。
例如,如果
A=np.array([[2,0],[0,1],[1,2]])
B=np.array([1,0])
我希望True
[1,0]
和[1,2]
分享超过0和少于2个元素。
另一方面,如果
B=np.array([2,0])
我希望False
因为只有行元素为2或0元素
目前我的方法是:
c=np.where((A[:]==B))[0]
n=np.bincount(c)
((n==0)+(n==2)).all()
对我而言,这似乎是一种令人费解的测试方式,我想知道是否有一种更为自然的方法,我不知道。
答案 0 :(得分:1)
我会这样做
neq=(A==B).sum(-1)
result = any(logical_and(neq<B.size, neq>0))
其中neq
跟踪A
的每一行与B
的共同位数。