Умножение и питание python целое число с плавающей запятой - PullRequest
3 голосов
/ 20 января 2020

Почему число с плавающей запятой python, умноженное на torch.long, дает torch.float, а питание поплавка с помощью torch.long даёт torch.long?

>>> a = 0.9
>>> b = torch.tensor(2, dtype=torch.long)

>>> foo = a * b
>>> print(foo, foo.dtype)
tensor(1.8000) torch.float32

>>> bar = a ** b 
>>> print(bar, bar.dtype)
tensor(0) torch.int64

1 Ответ

1 голос
/ 21 января 2020

Это похоже на ошибку, вероятно, в связи с тем, что pytorch связывает ** с __rpow__ или __pow__.

Например, если вы попытались 0.9 - torch.tensor(2), поскольку 0,9 не является тензором, это интерпретируется как torch.tensor(2).__rsub__(0.9), что работает правильно. ** ведет себя так же, но torch.tensor(2).__rpow__(0.9) некорректно возвращает tensor(0) с dtype int64.

Тем временем вы можете использовать torch.tensor(0.9) ** torch.tensor(2).

Подана ошибка: https://github.com/pytorch/pytorch/issues/32436

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...