我正在尝试在张量上执行逻辑元素操作,但似乎"和"关键字执行逻辑或,而"或"关键字执行逻辑和:
a = torch.zeros(3)
a[1] = 1 -- a will be [1,0,0]
b = torch.ones(3)
b[3] = 0 -- b will be [1,1,0]
c = torch.eq(a,1) and torch.eq(b,1)
d = torch.eq(a,1) or torch.eq(b,1)
我期待c成为[1,0,0]
因为只有在和 b等于1的位置才有意义才有意义。另外我期待d成为{ {1}}因为那些是或 b等于1的位置。令我惊讶的是,结果完全相反!
有什么解释吗?
答案 0 :(得分:1)
根据Lua docs:
运算符并返回其第一个参数(如果它为false);除此以外, 它返回第二个参数。运营商或首先返回 论证如果不是假的;否则,它返回第二个 参数
在这种情况下,这种行为恰好发生在"巧合"。在应用a
运算符时,它将在应用and
运算符和第一个参数(Tensor b
)时返回第二个参数(Tensor or
)。此外,张量a
对应于元素逻辑,而张量b
对应于元素逻辑或。