2017-07-05 68 views
0

我運行下面的代碼:「與」 和 「或」 上Theano

import theano.tensor as T 

print(T.eq(2, 1).eval()) 
print(T.eq(1, 1).eval()) 
print((T.eq(2, 1) and T.eq(1, 1)).eval()) 
print((T.eq(2, 1) or T.eq(1, 1)).eval()) 

的結果是:

False 
True 
True 
False 

爲什麼這是不是 「假,真,假,真」?

回答

1

因爲theano是一個符號庫,所以像T.eq(1,2)這樣的東西不會直接被評估爲布爾值。

>>> bool(T.eq(1,2)) 
True 
>>> type(T.eq(1,2)) 
<class 'theano.tensor.var.TensorVariable'> 

這個問題的奇怪結果是由於邏輯運算符在非布爾對象上工作。

>>> '123' and '456' 
'456' 
>>> '123' or '456' 
'123' 

here報價,節9.5:

x and y返回x如果xFalsey否則

x or y返回y如果xFalsex否則

正確的方法是使用位運算符:

>>> (T.eq(1,1) & T.eq(1,2)).eval() 
array(False, dtype=bool) 
>>> (T.eq(1,1) | T.eq(1,2)).eval() 
array(True, dtype=bool)