元素julia向量的元素比较

时间:2018-02-12 13:32:42

标签: vector tuples comparison julia

在Julia中,为什么以下按元素比较返回包含false

的向量
julia> [(1,)] .== (1,)
1-element BitArray{1}:

返回false

而以下返回true?

julia> [(1,)][1] == (1,)

返回true

使用egal运算符(=== and .===)时也是如此。

我在Julia 0.6.1和Julia 0.6.2(juliabox)上看到了这个;两者都在Linux 64位上。 我错过了什么?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

原因是.==遍历右侧的向量和左侧大小的元组,所以基本上它等同于包装测试

julia> (1,) == 1
false

在一个元素BitArray中。

要理解这一点,请考虑以下代码示例:

julia> [(1,2),] .== (1,2)
2-element BitArray{1}:
 false
 false

julia> [(1,2),(1,2),(1,2)] .== (1,2)
ERROR: DimensionMismatch("arrays could not be broadcast to a common size")
Stacktrace:
 [1] _bcs1(::Base.OneTo{Int64}, ::Base.OneTo{Int64}) at .\broadcast.jl:70
 [2] _bcs at .\broadcast.jl:63 [inlined]
 [3] broadcast_shape at .\broadcast.jl:57 [inlined] (repeats 2 times)
 [4] broadcast_indices at .\broadcast.jl:53 [inlined]
 [5] broadcast_c at .\broadcast.jl:313 [inlined]
 [6] broadcast(::Function, ::Array{Tuple{Int64,Int64},1}, ::Tuple{Int64,Int64}) at .\broadcast.jl:455

julia> [(1,)] .== ((1,),)
1-element BitArray{1}:
 true

在第一种情况下,(1,2)12进行比较。在第二个容器尺寸不匹配(2比3)。在第三个中,一切都匹配。