Nope
julia> s=0.0;
julia> m=rand(10000,1000);
julia> @time for i in 1:10000, j in 1:1000
s = s + m[i,j]
end
ERROR: UndefVarError: s not defined
[inlined code] from .\none:2
in anonymous at .\no file:4294967295
in eval at <invalid>:0
quinta-feira, 25 de Fevereiro de 2016 às 14:58:44 UTC, Yichao Yu escreveu:
>
> On Thu, Feb 25, 2016 at 9:57 AM, Yichao Yu <[email protected] <javascript:>>
> wrote:
> > On Thu, Feb 25, 2016 at 9:33 AM, abc <[email protected] <javascript:>>
> wrote:
> >> Ah, yes, this seems to have fixed the problem, thank you.
> >>
> >> Now, when not in global scope, using eachindex is definitely the
> fastest
> >> approach.
> >> I made some measurements over 1000 runs for each of the approaches in
> the
> >> original post, here are the averages:
> >> Using eachindex: 0.0026683
> >> Using ranges: 0.0041256
> >> Using in: 0.0031200
> >>
> >> I guess I'll stick with eachindex. :)
> >>
> >> On Thursday, February 25, 2016 at 1:50:04 PM UTC, Stefan Karpinski
> wrote:
> >>>
> >>> Can you try it not in global scope?
> >>>
> >>> On Thu, Feb 25, 2016 at 5:17 AM, abc <[email protected]> wrote:
> >>>>
> >>>> For the following matrix
> >>>> my_matrix = randn(10000, 1000)
> >>>> using eachindex to access all elements is much slower than using
> ranges
> >>>> or even for el in my_matrix, even though it says in the documentation
> >>>> (
> http://docs.julialang.org/en/release-0.4/stdlib/arrays/#Base.eachindex)
> >>>> that eachindex uses ranges for Arrays.
> >>>>
> >>>> Some code and numbers:
> >>>> julia> sum = 0.0
> >>>> julia> @time for iter in eachindex(my_matrix)
> >>>> sum += my_matrix[iter]
> >>>> end
> >>>> 1.288944 seconds (50.00 M allocations: 915.519 MB, 3.36% gc time)
> >>>> julia> sum = 0.0
> >>>> julia> @time for i in 1:10000, j in 1:1000
> >>>> sum += my_matrix[i,j]
> >>>> end
> >>>> 0.681678 seconds (34.38 M allocations: 524.582 MB, 2.45% gc time)
> >
> > ^^ I believe this one is also iterating in the wrong direction. Try
> > `for j in ..., for i in ...`
>
> `for j in ... , i in ...` *
>
> >
> >>>> julia> sum = 0.0
> >>>> julia> @time for el in my_matrix
> >>>> sum += el
> >>>> end
> >>>> 1.063564 seconds (40.00 M allocations: 762.993 MB, 3.41% gc time)
> >>>>
> >>>> Am I reading the documentation wrong, or is there something strange
> with
> >>>> the matrix indexing? Because as it is, I don't see any benefit of
> using
> >>>> anything different than simple ranges for manipulating matrices.
> >>>
> >>>
> >>
>