Julia中数组元素的匹配
使用Julia中数组元素的匹配,julia,Julia,使用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 没问题。虽然此操作本身可能没有用处,但我想知道错误消息的含义。因此,如果
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
没问题。虽然此操作本身可能没有用处,但我想知道错误消息的含义。因此,如果您能给我一些提示,我将不胜感激。要逐个元素进行比较,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],[3,4]
而不是其他形状的数组中 通过编写如下比较,可以帮助Julia了解如何广播第二个变量:
julia> x .== Any[[3, 4]]
您可以按预期获得位数组:
4-element BitArray{1}:
false
false
true
false
因此,使用比较结果编制索引也很有效:
julia> x[ x .== Any[[3,4]] ]
1-element Array{Any,1}:
[3,4]
非常感谢你的解释。现在我明白了这个错误消息中“广播”的含义。我还确认了
@show x[x.=[[3,4]for I=1:length(x)]=>Any[[3,4]]
(这对我来说已经是一个很大的惊喜!)同样地,x.==1
,`x.==“hi”,
x.=[1]`都有效(给出一个空的Any[]
)。看来朱莉娅对这个[3,4]
或类似的东西不满意。。。