У меня есть 2 функции для определения pi численно в Julia. Вторая функция (которая, я думаю, векторизована) медленнее первой. Почему векторизация медленнее? Существуют ли правила, когда для векторизации и когда не нужно?
function determine_pi(n)
area = zeros(Float64, n);
sum = 0;
for i=1:n
if ((rand()^2+rand()^2) <=1)
sum = sum + 1;
end
area[i] = sum*1.0/i;
end
return area
end
и другая функция
function determine_pi_vec(n)
res = cumsum(map(x -> x<=1?1:0, rand(n).^2+rand(n).^2))./[1:n]
return res
end
При запуске для n = 10 ^ 7 ниже приведены времена выполнения (после нескольких запусков)
n=10^7
@time returnArray = determine_pi(n)
#output elapsed time: 0.183211324 seconds (80000128 bytes allocated)
@time returnArray2 = determine_pi_vec(n);
#elapsed time: 2.436501454 seconds (880001336 bytes allocated, 30.71% gc time)