我有两个类似形状的布尔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]]。
答案 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.])