首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从numpy变量中减去布尔值得到TypeError

从numpy变量中减去布尔值得到TypeError
EN

Stack Overflow用户
提问于 2019-11-08 16:39:12
回答 1查看 1.1K关注 0票数 0

在使用numpy变量时,我很难理解这种奇怪的行为-

代码语言:javascript
复制
import numpy as np
from operator import lt,gt
val = lt(np.float64(0.8514),0) - gt(np.float(0.8514),0)

此操作失败,并显示以下错误-

代码语言:javascript
复制
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的输出是一个布尔变量。下面的代码片段都可以顺利地工作-

代码语言:javascript
复制
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执行的。

EN

回答 1

Stack Overflow用户

发布于 2019-11-08 17:15:51

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

代码语言:javascript
复制
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

如果我使用Python3,我没有得到错误信息,而且val = exp1 - exp2也可以工作。所以你可以考虑使用Python 3而不是Python 2。

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

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58763079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档