首页 > 解决方案 > 我怎么能不改变矩阵

问题描述

在 Julia 中,如果t是某个矩阵

t = [1 2; 3 4]
t1 = t
t1[1,1] = 0
t2 = t

t2给出与 相同的输出t1

我怎样才能使t2相等t

标签: julia

解决方案


他们实际上都是平等的:

julia> t = [1 2; 3 4]
2×2 Matrix{Int64}:
 1  2
 3  4

julia> t1 = t
2×2 Matrix{Int64}:
 1  2
 3  4

julia> t1[1,1] = 0
0

julia> t2 = t
2×2 Matrix{Int64}:
 0  2
 3  4

julia> t == t1 == t2
true

julia> t === t1 === t2
true

julia> pointer(t), pointer(t1), pointer(t2) # identical
(Ptr{Int64} @0x00007fd213d37000, Ptr{Int64} @0x00007fd213d37000, Ptr{Int64} @0x00007fd213d37000)

变量tt1t2指向相同的数据,相同的内存位置。所以当你变异时,你t1会变异所有。

如果您希望它们有所不同,例如只修改一个,则必须使用copy

julia> t = [1 2; 3 4];

julia> t1 = copy(t);

julia> t1[1,1] = 0;

julia> t2 = copy(t); # or just t if you want to avoid the copy

julia> t == t1 == t2
false

julia> pointer(t), pointer(t1), pointer(t2)
(Ptr{Int64} @0x00007fd21220e900, Ptr{Int64} @0x00007fd2142f9630, Ptr{Int64} @0x00007fd2142f9a90)

推荐阅读