我不时使用Julia,但我对以下行为感到惊讶:
让我们定义一个3x4数组
julia> m=rand(3,4)
3×4 Array{Float64,2}:
0.889018 0.500847 0.539856 0.828231
0.492425 0.582958 0.521406 0.754102
0.28227 0.834333 0.669967 0.0939701
现在我检查一下
julia> size(m,1), size(m,2)
(3, 4)
正如所料。
然而,我对此感到惊讶:
julia> size(m,3), size(m,2018)
(1, 1)
- >我原以为(0,0)
或error message
查看Julia代码可以确认此行为:
size(t::AbstractArray{T,N}, d) where {T,N} = d <= N ? size(t)[d] : 1
此外:
julia> m[2,1,1,1,1]
0.4924252391289974
- &GT;我原以为out of bounds error
所以我的问题是:&#34;理由是什么?&#34; (我不认为这是一个错误,我使用Julia版本0.6.2)
答案 0 :(得分:3)
我相信这是广播。
julia> m=rand(3,4)
3×4 Array{Float64,2}:
0.139323 0.663912 0.994985 0.517332
0.423913 0.121753 0.0327054 0.0754665
0.392672 0.47006 0.351121 0.787318
julia> size(m)
(3, 4)
julia> n = rand(3)
3-element Array{Float64,1}:
0.716752
0.98755
0.661226
julia> m .* n
3×4 Array{Float64,2}:
0.09986 0.475861 0.713157 0.370799
0.418636 0.120237 0.0322983 0.074527
0.259645 0.310816 0.23217 0.520595
请注意,n
的维度较小,因此第二维的大小为1,因此按列方式应用。广播中的标量处理方式不同,通常内联到融合广播功能中,您无法使用可变类型,因此大小1 =在更高维度上展开广播规则是实现此目的的好方法。