Поэлементная логическая операция и / или
Я пытаюсь выполнить логические поэлементные операции над тензорами, но кажется, что ключевое слово "and" выполняет логическое или, а ключевое слово "or" выполняет логическое и:
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]
поскольку имеет смысл иметь 1 только в позициях, где и a, и b равны 1. Также я ожидал, что d станет [1,1,0]
поскольку это те позиции, где a или b равны 1. К моему удивлению, результаты полностью противоположны! Есть объяснения?
1 ответ
Согласно Lua Docs:
Оператор и возвращает свой первый аргумент, если он ложен; в противном случае он возвращает второй аргумент. Оператор или возвращает свой первый аргумент, если он не равен false; в противном случае он возвращает второй аргумент
В этом случае такое поведение происходит просто как "совпадение". Вернет второй аргумент (Тензор a
) при применении and
оператор и первый аргумент (Тензор b
) при применении or
оператор. Также тензор a
соответствует поэлементному логическому и в то время как тензор b
соответствует поэлементному логическому или.