julia - 我怎么能不改变矩阵
问题描述
在 Julia 中,如果t
是某个矩阵
t = [1 2; 3 4]
t1 = t
t1[1,1] = 0
t2 = t
t2
给出与 相同的输出t1
。
我怎样才能使t2
相等t
?
解决方案
他们实际上都是平等的:
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)
变量t
、t1
和t2
指向相同的数据,相同的内存位置。所以当你变异时,你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)
推荐阅读
- php - 为什么 PDO fetch() 只返回第一行?
- serial-port - 在 Scilab consol 上复制 Arduino 的串行监视器
- db2 - DB2 连接到没有目录的远程数据库?
- php - 在php中确定什么是土地和什么是水
- javascript - 这种类似 JSON 的数据格式是什么?
- graphql - 将查询/变异操作记录到数据库以进行审计
- c# - Microsoft Graph .Net API:共享 OneDrive 文件夹
- java - 用于检索 csrf 令牌的内置方法
- android - 重新调整片段后的状态栏覆盖工具栏
- c# - 如何在 C# 中要求用户输入有限次数