【问题标题】:FOR loops and range in JuliaJulia 中的 FOR 循环和范围
【发布时间】:2021-03-08 21:24:52
【问题描述】:

当范围小于 1 时,我尝试在 for 循环中定义范围时出现错误。

例如下面的代码:

i = linspace(0, 3, 200)
graph = zeros(length(i), 1)

for j in 0:0.015:3
    graph[j] = j*cos(j^2)
end

报如下错误:ERROR: BoundsError()

为什么会这样?

【问题讨论】:

  • 我不确定这段代码应该做什么,但j0 开始,这不是一个有效的索引。下一个值是0.015,当然,它也不是一个有效的索引。
  • @Stefan 我想做的是从 0 到 3 评估函数 f(x) = x*cos(x^2)。我想将结果保存在 200x1 数组中,然后使用 PyPlot 绘制它。根据您所说,我了解到for 循环仅采用整数。我想我必须使用linspace 做点什么。
  • @Echetlaeus:仅供参考,我认为您的问题没有反映出足够的努力(因此可能会被否决)。您是否在 Google 上搜索过 BoundsError() 的含义和/或阅读过有关 Julia(或其他语言)中 for 循环和范围的信息,问题会很明显。
  • @cd98 我同意你的说法。过去,我在基本级别上玩过 MATLAB 和 FORTRAN。这是我唯一的编程经验。

标签: julia


【解决方案1】:

就像 StefanKarpinski 指出的那样,不是 for 循环(变量)只接受整数,而是数组索引。您无法访问数组的第 0.15 个元素。

这个怎么样:

x = range(0, stop=3, length=200)
y = zeros(length(x))

for i = 1:length(x)
  j = x[i]
  y[i] = j*cos(j^2)
end

甚至:

x = range(0, stop=3, length=200)
y = zeros(length(x))

for (i, j) in enumerate(x)
  y[i] = j * cos(j * j)
end

【讨论】:

  • @Oceanos:这也可以:x = linspace(0, 3, 200); y = [j*cos(j^2) for j in x]
【解决方案2】:

恕我直言,for 循环占用了更多空间,但并不清晰。注意确定什么被认为是“julianic”,但在 python 世界中,我认为大多数人会选择列表理解:

tic()
x = linspace(0, 3, 200)
y = [j*cos(j*j) for j in x]
toc()

elapsed time: 0.014455408 seconds

对我的眼睛更好更快的是:

tic()
x = linspace(0, 3, 200)
y = x.*cos(x.^2)
toc()

elapsed time: 0.000600354 seconds

.*.^ 中的. 表示您正在逐个元素地应用方法/函数。 不知道为什么这是一个更快的。 Julia 专家可能想在这方面为我们提供帮助。

【讨论】:

    猜你喜欢
    • 2023-03-18
    • 2020-09-26
    • 1970-01-01
    • 2022-12-16
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多