我认为视图函数的工作方式类似于C ++中的引用,基本上两个变量都指向同一块内存。
为什么这样可以工作:
julia> a = [1 2 3; 4 5 6; 7 8 9]
3×3 Array{Int64,2}:
1 2 3
4 5 6
7 8 9
julia> b = view(a, 1, :)
3-element view(::Array{Int64,2}, 1, :) with eltype Int64:
1
2
3
julia> b[1] = 100
100
julia> a
3×3 Array{Int64,2}:
100 2 3
4 5 6
7 8 9
julia> a[1, 3] = 200
200
julia> b
3-element view(::Array{Int64,2}, 1, :) with eltype Int64:
100
2
200
基本上,你改变了一个,另一个也会改变,反之亦然。但这不会产生相同的效果:
julia> a = [1 2 3; 4 5 6; 7 8 9]
3×3 Array{Int64,2}:
1 2 3
4 5 6
7 8 9
julia> a[3, :] = view(a, 1, :)
3-element view(::Array{Int64,2}, 1, :) with eltype Int64:
1
2
3
julia> a
3×3 Array{Int64,2}:
1 2 3
4 5 6
1 2 3
julia> a[1, 1] = 100
100
julia> a
3×3 Array{Int64,2}:
100 2 3
4 5 6
1 2 3
julia> a[3, 1] = 200
200
julia> a
3×3 Array{Int64,2}:
100 2 3
4 5 6
200 2 3
我的问题是:这是否等同于仅仅执行:
a[3, :] = a[1, :]
?这两者是否有任何性能上的优势?在第二种情况背后发生了什么?感谢任何反馈!