当我尝试在范围小于1时在for循环中定义范围时,出现错误。FOR循环和范围在Julia
例如下面的代码:
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()
这是为什么?
当我尝试在范围小于1时在for循环中定义范围时,出现错误。FOR循环和范围在Julia
例如下面的代码:
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()
这是为什么?
就像StefanKarpinski指出的那样,它不是只接受整数的for循环(变量),而是数组索引。您不能访问数组的第0.15个元素。
如何:
x = linspace(0, 3, 200)
y = zeros(length(x))
for i = 1:length(x)
j = x[i]
y[i] = j*cos(j^2)
end
甚至:
x = linspace(0, 3, 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]' – user4235730 2014-11-22 22:04:58
恕我直言,在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
其中.
在.*
或.^
表示您正在按元素应用方法/函数元素。 不知道为什么这是一个更快。朱莉娅专家可能想帮助我们。
我不知道这段代码应该做什么,但'j'开始于'0',这不是一个有效的索引。下一个值是“0.015”,当然这也不是有效的索引。 – StefanKarpinski 2014-11-22 21:01:56
@Stefan我想要做的是从0到3评估函数f(x)= x * cos(x^2)'。我想将结果保存在200x1数组中,然后使用'PyPlot '。从你所说的我明白,for循环只有整数。我想我必须用'linspace'做些事情。 – Echetlaeus 2014-11-22 21:08:26
@Echetlaeus:供参考,我认为你的问题没有反映出足够的努力(因此可能会被低估)。你是否搜索了'BoundsError()'意味着和/或已经阅读了关于Julia(或其他语言)中的循环和范围的问题,这个问题就显而易见了。 – cd98 2014-11-27 17:11:37