有了x = Any[[1,2],[2,3],[3,4],[4,5]],我用Julia0.4.0尝试了以下这一行
x[ x .== [3,4] ]
Run Code Online (Sandbox Code Playgroud)
但它导致了一个错误
ERROR: DimensionMismatch("arrays could not be broadcast to a common size")
Run Code Online (Sandbox Code Playgroud)
我预期看到这样的信息Any[ [3,4] ],因为
x[3] == [3,4] # => true
Run Code Online (Sandbox Code Playgroud)
没问题.虽然此操作本身可能没用,但我想知道错误消息的含义.所以我很感激为什么会出现这个错误的提示.
为了进行逐元素比较,Julia要求两个数组具有相同数量的元素.在这种情况下可以通过理解来实现:
julia> x = Any[[1,2],[2,3],[3,4],[4,5]]
4-element Array{Any,1}:
[1,2]
[2,3]
[3,4]
[4,5]
julia> x[x.==[[3,4] for i in 1:length(x)]]
1-element Array{Any,1}:
[3,4]
Run Code Online (Sandbox Code Playgroud)
所以我心中的问题是"为什么朱莉娅不会[3,4]自动将这个形状广播成这个形状?".以下示例正确广播:
julia> y = [1,2,3,4]
4-element Array{Int64,1}:
1
2
3
4
julia> y.==3
4-element BitArray{1}:
false
false
true
false
julia> y[y.==3]
1-element Array{Int64,1}:
3
Run Code Online (Sandbox Code Playgroud)
似乎朱莉娅的广播机制无法推断我们想要[3,4]广播[[3,4],[3,4],[3,4],[3,4]]而不是其他形式的数组.