Julia中数组元素的匹配

roy*_*vib 6 julia

有了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)

没问题.虽然此操作本身可能没用,但我想知道错误消息的含义.所以我很感激为什么会出现这个错误的提示.

Sim*_*mon 5

为了进行逐元素比较,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]]而不是其他形式的数组.