使用x = Any[[1,2],[2,3],[3,4],[4,5]]
,我尝试使用Julia0.4.0的以下行
x[ x .== [3,4] ]
但导致错误
ERROR: DimensionMismatch("arrays could not be broadcast to a common size")
我希望它能提供像Any[ [3,4] ]
这样的东西,因为
x[3] == [3,4] # => true
没问题。虽然此操作本身可能没用,但我想知道错误消息的含义。所以我很感激为什么会出现这种错误。
答案 0 :(得分: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]
所以我心中的问题是"为什么朱莉娅不会自动将[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
似乎Julia的广播机制无法推断我们希望[3,4]
广播到[[3,4],[3,4],[3,4],[3,4]]
而不是其他形状的数组。
答案 1 :(得分:3)
你可以通过编写这样的比较来帮助Julia解决如何广播第二个变量的问题:
julia> x .== Any[[3, 4]]
你按预期得到BitArray:
4-element BitArray{1}:
false
false
true
false
因此,使用比较结果进行索引也是有效的:
julia> x[ x .== Any[[3,4]] ]
1-element Array{Any,1}:
[3,4]