【问题标题】:boolean subtract DeprecationWarning布尔减法 DeprecationWarning
【发布时间】:2014-06-14 02:59:17
【问题描述】:

我最近升级到 numpy 1.9dev。 (为了改进 OpenBlas 支持)。

我有一些代码可以做到x-y 其中xy 是来自概率分布的样本。 如果分布是伯努利,那么它们是布尔值。 如果分布是高斯分布,那么它们就是浮点数。

取决于xy 所遵循的路径 可能是布尔值或浮点数。 我不必关心,因为 python 有鸭子类型。 如果它可以减去,那么它是xy 的有效值

我收到此警告:

弃用警告:numpy 布尔减法(二进制 - 运算符) 已弃用,请使用 bitwise_xor(^ 运算符)或 改为logical_xor 函数。

我已经让警告消失了,将它强制转换为浮点数。 这可能是一件好事,因为它使代码在较低级别上更加一致。 (不作为一件好事出售)。

要采取的正确措施是什么? 当xy 是浮点数时,我不能使用布尔或按位异或,这会中断。 在xy 的类型上创建代码分支会很丑陋。

【问题讨论】:

  • 你认为False - True应该是什么?
  • 杰米:好点。尽管如此,从不安静。答案是我的期望是-1。这表明我的数据可能更好地表示为浮点数(或整数)。
  • @Jamie 我在我的问题中添加了更多细节。也许您可能想做出一个回答,说明您可以减去布尔值的基本前提是无稽之谈。
  • 您可以使用np.subtract(a, b, dtype=np.float)。 bool 上的数学运算映射到逻辑运算,而不是像 C 那样映射到 1 和 0。我知道的唯一例外是 sum() ,它隐式转换为整数
  • 这很烦人,因为对于 scipy 稀疏矩阵,它仍然是 - 而不是 ^

标签: python numpy duck-typing


【解决方案1】:

也许你应该这样做:

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

然后

x - y

至少,它适用于我的情况。

【讨论】:

    【解决方案2】:

    这是我的解决方案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-06
      • 2012-03-17
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      • 2020-02-23
      相关资源
      最近更新 更多