测试numpy数组中的行是否与给定行相同或每个元素不同

时间:2014-03-24 14:45:03

标签: python arrays numpy

这与我之前的问题有关: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()

对我而言,这似乎是一种令人费解的测试方式,我想知道是否有一种更为自然的方法,我不知道。

1 个答案:

答案 0 :(得分:1)

我会这样做

neq=(A==B).sum(-1)
result = any(logical_and(neq<B.size, neq>0))

其中neq跟踪A的每一行与B的共同位数。