布尔减法弃用警告

11 投票
2 回答
25522 浏览
提问于 2025-04-18 09:45

我最近升级到了numpy 1.9dev版本。 (为了更好地支持OpenBlas)。

我有一些代码在做 x-y 的运算, 其中 xy 是从一个概率分布中取样的值。 如果这个分布是伯努利分布,那么它们就是布尔值(真或假)。 如果是高斯分布,那么它们就是浮点数(小数)。

根据不同的情况,xy 可能是布尔值也可能是浮点数。 我不需要担心这一点,因为Python有鸭子类型的特性。 只要能进行减法运算,xy 就是有效的值。

但是我收到了一个警告:

DeprecationWarning: numpy布尔值的减法(使用二元 - 操作符) 已经不推荐使用,建议使用位运算异或(^ 操作符)或者 逻辑异或函数。

我通过将它们强制转换为浮点数来消除了这个警告。 这样做可能是个好事,因为它让代码在底层变得更一致。 (不过我对此并不完全确定)。

那么我应该采取什么正确的措施呢? 我不能使用布尔值或位运算异或,因为当 xy 是浮点数时,这样会出错。 如果根据 xy 的类型来分支代码,那样看起来会很麻烦。

2 个回答

1

这是我的解决方案:

z = (x.astype(np.float32) - y.astype(np.float32)).astype(np.bool)
16

也许你应该这样做:

x=x.astype(numpy.float32)
y=y.astype(numpy.float32)

然后

x - y

至少在我的情况下,这样做是有效的。

撰写回答