Как оптимизировать или усовершенствовать функцию?
Имеется torch-тензор с булевыми значениями (False, True). Мне нужна функция, которая возвращает True, если в булевом тензоре только один True. Я написал такую функцию, но внешний вид функции мне не нравится.
Сама функция:
def is_contain_only_one_true(tensor: torch.Tensor) -> bool:
return tensor.nonzero().numel() == 1
import torch
>>> a = torch.tensor([True, False, False, True])
>>> is_contain_only_one_true(a) # 2 True
False
>>> b = torch.tensor([True, False, False]) # Тут один True
>>> is_contain_only_one_true(b)
True
Функция отрабатывает и возвращает ожидаемый результат, но с предупреждением:
<ipython-input-4-a3e0f370a666>:2: UserWarning: This overload of nonzero is deprecated:
nonzero()
Consider using one of the following signatures instead:
nonzero(*, bool as_tuple) (Triggered internally at ../torch/csrc/utils/python_arg_parser.cpp:766.)
return tensor.nonzero().numel() == 1
Есть ли какой-нибудь более прозрачный способ добиться того же результата?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Вот так предупреждение не выдаёт:
torch.nonzero(tensor).numel() == 1
Наверное, логичнее всего сделать так, только на выходе будет не просто bool, а tensor(bool) (который легко превращается в обычный bool):
torch.sum(tensor) == 1