Ich habe einen Hintergrund in MATLAB, also habe ich die Tendenz, alles zu vektorisieren. Doch in Julia, ich getestet, diese beiden Funktionen:Julia - warum sind Schleifen schneller
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)
Ich habe zwei Fragen:
- Warum sind Schleifen schneller?
- Wenn Schleifen tatsächlich schneller sind, gibt es dann "intelligente" Vektorisierungstechniken, die Schleifen nachahmen? Die Syntax für Schleifen ist hässlich und lang.
off-topic: Bin ich die einzige hier Person, die der Matlab-Code voll von "smart" 'bsxfun' Vektorisierung Tricks fühlt, dass tatsächlich nur schwer zu lesen? In einigen Fällen brauchen wir nur Schleifen, also sollte es schnell sein;) – Gnimuc