小编Jac*_*oni的帖子

Julia 使用 fill() 和 .+= 的“奇怪”行为

我在我的代码中观察到了“.+=”的意外行为(可能只是我,我对 Julia 还是比较陌生)。考虑以下示例:

julia> b = fill(zeros(2,2),1,3)
       1×3 Array{Array{Float64,2},2}:
       [0.0 0.0; 0.0 0.0]  [0.0 0.0; 0.0 0.0]  [0.0 0.0; 0.0 0.0]

julia> b[1] += ones(2,2)
       2×2 Array{Float64,2}:
       1.0  1.0
       1.0  1.0

julia> b
       1×3 Array{Array{Float64,2},2}:
       [1.0 1.0; 1.0 1.0]  [0.0 0.0; 0.0 0.0]  [0.0 0.0; 0.0 0.0]

julia> b[2] .+= ones(2,2)
       2×2 Array{Float64,2}:
       1.0  1.0
       1.0  1.0

julia> b
       1×3 Array{Array{Float64,2},2}:
       [1.0 1.0; 1.0 1.0]  [1.0 1.0; 1.0 1.0]  [1.0 1.0; 1.0 1.0]
Run Code Online (Sandbox Code Playgroud)

可以看出,最后一条命令不仅改变了 b[2] 的值,也改变了 b[3] 的值,而 b[1] 保持不变(*),我们可以确认运行: …

sum broadcast in-place julia arrayofarrays

3
推荐指数
1
解决办法
96
查看次数

标签 统计

arrayofarrays ×1

broadcast ×1

in-place ×1

julia ×1

sum ×1