Theano上的“和”和“或”

时间:2017-07-05 07:47:55

标签: 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 个答案:

答案 0 :(得分: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如果xx,则返回False,否则返回y

     

x or y如果yx,则返回False,否则返回x

正确的方法是使用按位运算符:

>>> (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)