Вычитание логических значений, полученных из числовых переменных, приводит к TypeError - PullRequest
0 голосов
/ 08 ноября 2019

У меня проблемы с пониманием этого странного поведения при использовании переменной numpy-

import numpy as np
from operator import lt,gt
val = lt(np.float64(0.8514),0) - gt(np.float(0.8514),0)

Это происходит со следующей ошибкой -

TypeErrorTraceback (most recent call last)
<ipython-input-37-ddc655dbbe89> in <module>()
      1 from operator import lt,gt
----> 2 val = lt(np.float64(0.8514),0) - gt(np.float(0.8514),0)

TypeError: numpy boolean subtract, the `-` operator, is deprecated, use the bitwise_xor, the `^` operator, or the logical_xor function instead.

Это не должно происходить, так как вывод команды lt иgt - логическая переменная. Следующие фрагменты работают без сбоев -

from operator import lt,gt
import numpy as np
val = True - False
val = lt(float(np.float64(0.8514)),0) - gt(float(np.float(0.8514)),0)

Я не понимаю, в чем проблема, когда входные данные представляют собой пустую переменную. Приведенный выше код был выполнен в Python-2.

1 Ответ

0 голосов
/ 08 ноября 2019

Как показывает сообщение об ошибке, оператор - устарел. Вместо этого просто используйте оператор ^ для логических операций.

import numpy as np
from operator import lt, gt

exp1 = lt(np.float64(0.8514), 0)
exp2 = gt(np.float64(0.8514), 0)

val = exp1 ^ exp2
print(val) # True

Я не получаю сообщение об ошибке, если использую Python 3, и val = exp1 - exp2 также работает. Поэтому вы можете рассмотреть возможность использования Python 3 вместо Python 2.

Если по какой-то причине вы не хотите выполнять логические операции, вы можете привести exp1 и exp2 к float или int:

import numpy as np
from operator import lt, gt

exp1 = lt(np.float64(0.8514), 0)
exp2 = gt(np.float64(0.8514), 0)

val = int(exp1) - int(exp2)
print(val) # -1

val = float(exp1) - float(exp2)
print(val) # -1.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...