【发布时间】:2014-06-14 02:59:17
【问题描述】:
我最近升级到 numpy 1.9dev。 (为了改进 OpenBlas 支持)。
我有一些代码可以做到x-y
其中x 和y 是来自概率分布的样本。
如果分布是伯努利,那么它们是布尔值。
如果分布是高斯分布,那么它们就是浮点数。
取决于x 和y 所遵循的路径
可能是布尔值或浮点数。
我不必关心,因为 python 有鸭子类型。
如果它可以减去,那么它是x 和y 的有效值
我收到此警告:
弃用警告:numpy 布尔减法(二进制
-运算符) 已弃用,请使用 bitwise_xor(^运算符)或 改为logical_xor 函数。
我已经让警告消失了,将它强制转换为浮点数。 这可能是一件好事,因为它使代码在较低级别上更加一致。 (不作为一件好事出售)。
要采取的正确措施是什么?
当x 和y 是浮点数时,我不能使用布尔或按位异或,这会中断。
在x 和y 的类型上创建代码分支会很丑陋。
【问题讨论】:
-
你认为
False - True应该是什么? -
杰米:好点。尽管如此,从不安静。答案是我的期望是-1。这表明我的数据可能更好地表示为浮点数(或整数)。
-
@Jamie 我在我的问题中添加了更多细节。也许您可能想做出一个回答,说明您可以减去布尔值的基本前提是无稽之谈。
-
您可以使用
np.subtract(a, b, dtype=np.float)。 bool 上的数学运算映射到逻辑运算,而不是像 C 那样映射到 1 和 0。我知道的唯一例外是 sum() ,它隐式转换为整数 -
这很烦人,因为对于 scipy 稀疏矩阵,它仍然是
-而不是^
标签: python numpy duck-typing