比较布尔numpy数组

时间:2015-12-07 11:26:52

标签: arrays if-statement numpy boolean

我有两个类似形状的布尔numpy数组:

where InvoiceCNotes.[docnumber] = AllocationsTEMP.[docnumber]

如何获得数组a=[[True,True,False,False]] b=[[True,False,True,False]] ,其中1表示只有数组c为真, 2表示只有数组a为真,0表示两个数组都为假,b表示两者都为真。所以在这种情况下,结果应该是[[nan,1,2,0]]。

2 个答案:

答案 0 :(得分:3)

您可以使用np.where -

np.where(a*b,np.nan,(2*b + a))

示例运行 -

In [60]: a
Out[60]: array([[ True,  True, False, False]], dtype=bool)

In [61]: b
Out[61]: array([[ True, False,  True, False]], dtype=bool)

In [62]: np.where(a*b,np.nan,(2*b + a))
Out[62]: array([[ nan,   1.,   2.,   0.]])

答案 1 :(得分:2)

您可以使用np.select

In [20]: a = np.array([True,True,False,False])

In [21]: b = np.array([True,False,True,False])

In [23]: np.select([a&~b, b&~a, a&b], [1, 2, np.nan], default=0)
Out[23]: array([ nan,   1.,   2.,   0.])