Le mercredi 21 octobre 2015 à 06:10 -0700, Randy Zwitch a écrit :
> I'm going to guess either it's because of the anonymous function
> definition within your map function. Note that you aren't getting
> *exactly* the same results, as the Array types are different.
>
> It also isn't universally true that comprehensions are faster. See
> the following counter-example:
>
> julia> s = ["as", "sdf", "qwer"]
> 3-element Array{ASCIIString,1}:
> "as"
> "sdf"
> "qwer"
>
> julia> @time [length(i) for i in s]
> 0.000019 seconds (10 allocations: 384 bytes)
> 3-element Array{Any,1}:
> 2
> 3
> 4
>
> julia> @time map(length, s)
> 0.000015 seconds (5 allocations: 256 bytes)
> 3-element Array{Int64,1}:
> 2
> 3
> 4
>
> In this case (after multiple runs), map is even or just slightly
> faster than a comprehension. I presume map is faster here because it
> knows the result of function will be Array{Int64}, where as the
> comprehension Julia doesn't know and returns an Array{Any}
This is only true if you run the code from the global scope. Never do
that when benchmarking. See:
http://docs.julialang.org/en/latest/manual/performance-tips/#avoid-glob
al-variables
Regards
> On Wednesday, October 21, 2015 at 8:55:50 AM UTC-4, Ján Dolinský
> wrote:
> > Hi,
> >
> > I'd like to check which approach is a better one for the example
> > below. The task is rather simple, each string in vector "s" should
> > be "surrounded" by square brackets.
> >
> > e.g.
> >
> > s = AbstractString["as", "sdf", "qwer"] # s is typically a lot
> > longer
> >
> > @time st1 = AbstractString[ "[" * i * "]" for i in s ]
> > 0.000057 seconds (16 allocations: 672 bytes)
> > 3-element Array{AbstractString,1}:
> > "[as]"
> > "[sdf]"
> > "[qwer]"
> >
> > @time st2 = map(x->"["*x*"]", s)
> > 0.002932 seconds (33 allocations: 2.035 KB)
> > 3-element Array{ASCIIString,1}:
> > "[as]"
> > "[sdf]"
> > "[qwer]"
> >
> >
> >
> > The both expressions yield same results. I wonder whether from the
> > language design point of view one approach should be preferred over
> > the other. Comprehension here is considerably faster, I wonder why.
> >
> > Thanks,
> > Jan
> >
> >