从numpy变量中减去布尔值会导致TypeError

时间:2019-11-08 08:39:12

标签: python numpy

使用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)

我不明白输入为numpy变量时出了什么问题。上面的代码是在Python-2中执行的。

1 个答案:

答案 0 :(得分:0)

如错误消息所指示,-运算符已被弃用。只需使用^运算符进行逻辑运算即可。

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。

如果由于某种原因不想执行逻辑操作,可以将exp1exp2强制转换为floatint

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