【问题标题】:Julia, integer vs boolean results from selection of instances in two arraysJulia,整数与布尔结果来自选择两个数组中的实例
【发布时间】:2021-05-03 10:12:39
【问题描述】:

我有一个名为 Pop 的 3d 数组。我想知道两个不同的条件满足多少次,它们都对我独立工作,但我不能把两者放在一起。

Pop[end, :, 1] .== 3

工作正常,产生一个正确的 1 和 0 的整数向量。还有

Pop[end-1, :, 1] .== 4

有效,再次返回整数向量,但是当我将两者放在一起时:

count(Pop[end, :, 1] .== 3 && Pop[end-1, :, 1] .== 4)

我收到此错误:

ERROR: TypeError: non-boolean (BitArray{1}) used in boolean context

哪一种帮助,可以看出两个数值数组不能以布尔方式进行比较。我的语法有什么问题来计算同时满足两个条件的次数。很简单,我知道,但我无法得到它!谢谢。 J

【问题讨论】:

  • 你想要(Pop[end, :, 1] .== 3) .& (Pop[end-1, :, 1] .== 4)。请注意,如果没有括号,优先级会有所不同:将 :(1 == 2 & 3 == 4) |> dump&& 进行比较。
  • Thx mcabbot,我确实尝试找到示例和/或解释,但似乎语言太新了,几乎没有。我在哪里可以找到.&&& 之间差异的描述?
  • && 就像 ? : 没有其他情况,这里描述:docs.julialang.org/en/v1/manual/control-flow。而& 只是一个函数,如下所述:docs.julialang.org/en/v1/manual/mathematical-operations。手册总体上还是不错的,当然你不需要读到最后。

标签: arrays boolean conditional-statements julia


【解决方案1】:

&& 是一个短路布尔值,这意味着如果第一项是true,则不计算其余项(请参阅documentation)。这也意味着它仅适用于单个布尔值,并且不能通过数组广播。

& 是您要在此处使用的按位与运算符 (documentation),因为它可以使用语法 .& 在数组上广播,与使用 .== 的方式相同

julia> [true, true, false, false] .& [true, false, true, false]
4-element BitVector:
 1
 0
 0
 0

更新

在 Julia 1.7+ 中,短路运算符 &&|| 现在可以作为 .&&.|| (#39594) 参与广播融合:

julia> [true, true, false, false] .&& [true, false, true, false]
4-element BitVector:
 1
 0
 0
 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2017-04-26
    相关资源
    最近更新 更多