gpt4 book ai didi

arrays - 用数组填充数组不能按我预期的那样工作

转载 作者:行者123 更新时间:2023-12-04 11:51:36 24 4
gpt4 key购买 nike

我想制作一个多数组,其条目是多数组,并且想将某个数组一个一个地插入条目中。
例如,我制作了名为 arr 的 2 x 3 矩阵并尝试用 randn(4,4) 产生的 4 x 4 矩阵填充 [1,1] 和 [1,2] 条目.

arr = fill(Matrix{Float64}[], 2, 3)
push!(arr[1,1],randn(4,4))
push!(arr[1,2],randn(4,4))
println(arr[1,1])
println(arr[1,2])
println(arr[1,3])

但是,结果是 arr的所有条目(除了 [1,1] 和 [1,2])被填充相同的 randn(4,4) , 而不仅仅是 [1,1] 和 [1,2] 填充 randn(4,4) :
[[-0.15122805007483328 0.6132236453930502 -0.9090110366765862 1.2589924202099898; -1.120611384326006 -0.9083935218058066 0.7252290006516056 1.0970416725786256; -0.19173238706933265 1.3610525411901113 -0.05258697093572793 0.7776085390912448; 0.18491459001855373 -2.0537142669734934 0.3482557186126859 0.0047622478008474845], [0.23422967703060255 -0.51986351753462 0.45947166573674303 0.31316899298864387; 0.3704450103622709 -0.8186574197233013 -0.9990329964554037 -0.8345957519924763; 0.56641529964098 -0.8393435538481216 -0.6379336546939682 1.1843452368116358; 0.9435767553275002 0.0033471181565433127 -1.191611491619908 1.3970554854927264]]
[[-0.15122805007483328 0.6132236453930502 -0.9090110366765862 1.2589924202099898; -1.120611384326006 -0.9083935218058066 0.7252290006516056 1.0970416725786256; -0.19173238706933265 1.3610525411901113 -0.05258697093572793 0.7776085390912448; 0.18491459001855373 -2.0537142669734934 0.3482557186126859 0.0047622478008474845], [0.23422967703060255 -0.51986351753462 0.45947166573674303 0.31316899298864387; 0.3704450103622709 -0.8186574197233013 -0.9990329964554037 -0.8345957519924763; 0.56641529964098 -0.8393435538481216 -0.6379336546939682 1.1843452368116358; 0.9435767553275002 0.0033471181565433127 -1.191611491619908 1.3970554854927264]]
[[-0.15122805007483328 0.6132236453930502 -0.9090110366765862 1.2589924202099898; -1.120611384326006 -0.9083935218058066 0.7252290006516056 1.0970416725786256; -0.19173238706933265 1.3610525411901113 -0.05258697093572793 0.7776085390912448; 0.18491459001855373 -2.0537142669734934 0.3482557186126859 0.0047622478008474845], [0.23422967703060255 -0.51986351753462 0.45947166573674303 0.31316899298864387; 0.3704450103622709 -0.8186574197233013 -0.9990329964554037 -0.8345957519924763; 0.56641529964098 -0.8393435538481216 -0.6379336546939682 1.1843452368116358; 0.9435767553275002 0.0033471181565433127 -1.191611491619908 1.3970554854927264]]
怎么了?
任何信息,将不胜感激。

最佳答案

当您这样做时arr = fill(Matrix{Float64}[], 2, 3)所有 6 个元素都指向内存中完全相同的位置,因为 fill不进行深度复制 - 它只是复制引用。基本上,使用 fill当第一个参数可变时,结果通常不是一个好主意。
因此,您真正想要的是:

arr = [Matrix{Float64}[] for i in 1:2, j in 1:3]
现在每个 6插槽将在内存中拥有自己的地址。

关于arrays - 用数组填充数组不能按我预期的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68243392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com