我怎么能不改变矩阵

Bri*_*hoi 2 julia

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

t = [1 2; 3 4]
t1 = t
t1[1,1] = 0
t2 = t
Run Code Online (Sandbox Code Playgroud)

t2给出与 相同的输出t1

我怎样才能做到t2平等t

fre*_*kre 6

它们实际上都是平等的:

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)
Run Code Online (Sandbox Code Playgroud)

变量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)
Run Code Online (Sandbox Code Playgroud)