Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia中数组元素的匹配_Julia - Fatal编程技术网

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]
或类似的东西不满意。。。