我有MATLAB的背景,所以我傾向於矢量化所有東西。然而,朱莉婭,我測試了這兩個功能:朱莉婭 - 爲什麼循環更快
function testVec(n)
t = [0 0 0 0];
for i = 1:n
for j = 1:4
t[j] = i;
end
end
end
function testVec2(n)
t = [0 0 0 0];
for i = 1:n
t.= [i i i i];
end
end
@time testVec(10^4)
0.000029 seconds (6 allocations: 288 bytes)
@time testVec2(10^4)
0.000844 seconds (47.96 k allocations: 1.648 MiB)
我有兩個問題:
- 爲什麼循環更快?
- 如果循環確實更快,是否有模仿循環的「智能」矢量化技術?循環的語法很醜,很長。
題外話:我是唯一一個覺得充滿「智能」'bsxfun'矢量化技巧的Matlab代碼實際上難以閱讀嗎?在某些情況下,我們只需要循環,所以它應該很快;) – Gnimuc