我刚开始使用来自Python的Julia并正在做一些实验。
我想创建一个数组,该数组是由循环内的函数产生的一系列5个数组,我假设我误解了for循环或push函数的工作方式。我试过了append函数,但随后您在coords数组中得到了一个元素数组。
trj = []
for i in 1:n
coords = run(coords, vels)
println(coords)
push!(trj, coords)
end
println()
println(trj)
这是我得到的输出:
Any[[0.0806422, 0.785333, 0.942802], [0.0510982, 0.716546, 0.620131], [0.357414, 0.448247, 0.386514]]
Any[[0.265953, 0.785003, 0.898467], [0.230179, 0.729533, 0.656178], [0.260246, 0.571314, 0.302354]]
Any[[0.451263, 0.784673, 0.854133], [0.40926, 0.74252, 0.692224], [0.163079, 0.694381, 0.218195]]
Any[[0.636573, 0.784342, 0.809798], [0.588342, 0.755507, 0.72827], [0.065912, 0.817448, 0.134035]]
Any[[0.821884, 0.784012, 0.765463], [0.767423, 0.768494, 0.764317], [0.968745, 0.940515, 0.0498756]]
Any[Any[[0.821884, 0.784012, 0.765463], [0.767423, 0.768494, 0.764317], [0.968745, 0.940515, 0.0498756]], Any[[0.821884, 0.784012, 0.765463], [0.767423, 0.768494, 0.764317], [0.968745, 0.940515, 0.0498756]], Any[[0.821884, 0.784012, 0.765463], [0.767423, 0.768494, 0.764317], [0.968745, 0.940515, 0.0498756]], Any[[0.821884, 0.784012, 0.765463], [0.767423, 0.768494, 0.764317], [0.968745, 0.940515, 0.0498756]], Any[[0.821884, 0.784012, 0.765463], [0.767423, 0.768494, 0.764317], [0.968745, 0.940515, 0.0498756]]]
如您所见,trj数组只是coords乘以5的最后一个版本,而不是5个产生的coords数组中的一系列。
答案 0 :(得分:2)
坐标中只有一个元素副本,并使用run()函数修改这些元素。这是Julia约定将变元函数以!命名的原因之一,例如run!(coords,vels),以提醒您这一点。我建议您更改run()以修改其参数的副本并返回它,但是如果您不想这样做,则可以这样做:
trj = Vector{Vector{Vector{Float64}}}()
for i in 1:n
coords = run(coords, vels) # should be called run!
println(coords)
push!(trj, deepcopy(coords))
end
println()
println(trj)
deepcopy()在向量中获取新元素,因此下一次对coords()的调用不会覆盖它们。