Thanks John. Here is the results when wrapped in a function body. The for
loop wins as expected, map! still looks horrible...
julia> a=rand(10000,10000)
julia> f1(a::Array{Float64})=map!(sin,a)
julia> @time f1(a);
elapsed time: 7.344967598 seconds (4799991904 bytes allocated, 21.07% gc
time)
julia> function g1(a::Array{Float64}) b=sin(a); end
julia> @time g1(a);
elapsed time: 0.886401569 seconds (800000128 bytes allocated)
julia> function h1(a::Array{Float64}) for i=1:length(a); a[i]=sin(a[i]); end
; end
julia> @time h1(a);
elapsed time: 0.70801756 seconds (80 bytes allocated)
On Sunday, November 30, 2014 7:26:15 PM UTC+2, John Myles White wrote:
>
> Hi Deniz,
>
> If you time things in the global scope, you will come to incorrect
> conclusions about performance. If you want to do performance comparisons,
> you need to do them inside of a function body to get meaningful results.
>
> — John
>
> On Nov 30, 2014, at 9:24 AM, Deniz Yuret <[email protected] <javascript:>>
> wrote:
>
> I am trying to figure out the most efficient way to perform in-place array
> operations in Julia.
>
> julia> a=rand(10000,10000)
>
> julia> tic(); b=sin(a); toc();
> elapsed time: 1.25738114 seconds
>
> julia> tic(); map!(sin,a); toc();
> elapsed time: 7.821650464 seconds
>
> julia> tic(); for i=1:length(a); a[i]=sin(a[i]); end; toc();
> elapsed time: 24.993171377 seconds
>
> Nothing seems faster than creating a new array, which I'd like to avoid
> without slowing down the code if possible.
>
> Any ideas?
>
>
>