【发布时间】:2020-05-06 17:20:21
【问题描述】:
假设我有p = [true, true, false, false] 和q = [true, false, true, false]。我怎么能在逻辑上“和”他们,说像
p .&& q?
【问题讨论】:
假设我有p = [true, true, false, false] 和q = [true, false, true, false]。我怎么能在逻辑上“和”他们,说像
p .&& q?
【问题讨论】:
改用.&:
julia> p=[true, true, false, false]
4-element Array{Bool,1}:
1
1
0
0
julia> q=[true, false, true, false]
4-element Array{Bool,1}:
1
0
1
0
julia> p .& q
4-element BitArray{1}:
1
0
0
0
您必须小心,因为& 也适用于非Bool 元素:
julia> [11,12,13] .& [3,2,1]
3-element Array{Int64,1}:
3
0
1
【讨论】:
.&,您就是broadcasting 元素方面的“和”操作。广播是一种非常强大的语法,并且随着您的代码变得越来越复杂,它的组合非常好。
11 和 @987654329 的实际位时会发生什么@... 换句话说,您正在比较...1011(十一)和..0011(三)中的每一位,并得到..0011(三)作为第一个结果。
p = Bool[true, true, false, false],特别是如果它们创建为空Bool[] 然后您开始填充它们。这将使他们只接受布尔值,如果这是您的意图,您需要将非布尔值转换为布尔值,即:bool(x::Int) = x == 0 ? false : true
:a - 他们认为它的 eltype 是 Bool 并且他们在上面做 .&,但结果他们默默地得到了错误的结果(他们学习很久以后再说)。