Поэлементная логическая операция и / или

Я пытаюсь выполнить логические поэлементные операции над тензорами, но кажется, что ключевое слово "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 соответствует поэлементному логическому или.

Другие вопросы по тегам