使用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中执行的。
答案 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。
如果由于某种原因不想执行逻辑操作,可以将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