當我嘗試在範圍小於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