2015-12-07 3 views
2

У меня есть два логических Numpy массивов одинаковой формы, как:Сравнение булевы Numpy массивы

a=[[True,True,False,False]] 
b=[[True,False,True,False]] 

Как я могу получить массив c, где 1 указывает на то, что только массив a правда, 2 указывает на то, что только массив b является true, 0, где оба массива ложны и nan, где оба значения true. Поэтому в этом случае результат должен быть [[nan, 1,2,0]]].

+1

Что делать, если оба они истинны? – Divakar

+0

Я обновил вопрос: если оба являются истинными, следует набрать «nan» – Johannes

ответ

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.]) 
3

Вы можете использовать np.where -

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

Sample пробег -

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.]]) 
Смежные вопросы