我运行以下代码:
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
为什么这不是“假,真,假,真”?
答案 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
如果x
为x
,则返回False
,否则返回y
x or y
如果y
为x
,则返回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)