【问题标题】:Bounds Error in Julia When Working with Arrays使用数组时 Julia 中的边界错误
【发布时间】:2020-06-26 09:46:51
【问题描述】:

我正在尝试在 Julia 中模拟 3D 随机游走,以此来学习 Julia 编程的技巧。我定义了所有变量,然后初始化了一个 (n_steps X 3) 零数组,我想在步行时使用它来存储我的坐标。这里,“n_steps”是walk的步数,三列分别对应x、y、z坐标。当我尝试使用新坐标更新数组时,出现错误:

错误:LoadError:BoundsError:尝试访问索引 [0, 1] 处的 100×3 Array{Float64,2}

我不明白为什么会出现此错误。据我所知,我正在遍历数组的所有行并更新 x、y 和 z 坐标。我从未提及索引 0,因为我指定循环从代码中的第 1 行开始。到底是怎么回事?到目前为止,这是我的代码(我还没有绘制,因为如果不解决这个问题我就无法继续前进):

using Plots 
using Random

len_step = 1
θ_min, θ_max = 0, pi 
ϕ_min, ϕ_max = 0, 2 * pi

n_steps = 100

init = zeros(Float64, n_steps, 3)

for jj = 1:1:length(init)
    θ_rand = rand(Float64)* (θ_max - θ_min)
    ϕ_rand = rand(Float64)* (ϕ_max - ϕ_min)
    x_rand = len_step * sin(θ_rand) * cos(ϕ_rand)
    y_rand = len_step * sin(θ_rand) * sin(ϕ_rand)
    z_rand = len_step * cos(θ_rand)
    init[jj, 1] += init[jj-1, 1] + x_rand
    init[jj, 2] += init[jj-1, 2] + y_rand
    init[jj, 3] += init[jj-1, 3] + z_rand
end

print(init)

如果相关,我将在 Windows 10 的 64 位上运行 Julia 版本 1.4.2。非常感谢任何帮助。谢谢。

【问题讨论】:

标签: arrays julia indexoutofboundsexception


【解决方案1】:

函数length 返回数组的长度,就好像它是一维的一样。你要的是size

julia> init = zeros(3,5)
3×5 Array{Float64,2}:
 0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0

julia> length(init)
15

julia> size(init)
(3, 5)

julia> size(init, 2)
5

julia> size(init, 1)
3

还要注意,在 julia 中,数组索引从 1 开始,并且由于您在索引 jj-1 处访问,因此您不能在 1 处开始循环。

【讨论】:

  • 另外,jj 应该在循环中从 2 而不是 1 开始被索引
  • 谢谢,我在答案中添加了这个!
  • 谢谢!我将 for 循环行更改为“for jj = 2:1:n_steps”,现在它可以完美运行了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
相关资源
最近更新 更多