For some of your cases, copy!(t, a) or fill!(t, 1.0+2.0) may be what you want.
--Tim

On Thursday, October 23, 2014 01:58:48 AM [email protected] wrote:
> > Those coming to Julia from languages like Python, R, Matlab/Octave, etc.
> > have it ingrained in them to "fear the loop" and to perform loop-like
> > calculations in "verbose and convoluted" ways.
> 
> Please compare my Python version with yours. If I look at the Python
> version in 2 month, I'll immediately understand what it does and what it is
> used for, yours is not as straight forward.
> 
> But I'm really not complaining. I was just surprised that I couldn't
> decrease the allocation. I still don't understand why t[1] = 1.0+2.0
> allocates nothing, while t[:] = 1.0+2.0 allocates things.
> 
> >  It is actually quite easy to do this calculation in Julia with very
> > 
> > little storage allocation by writing three nested loops.
> > 
> > function mindist(pos::Matrix{Float64}, Acp::Matrix{Float64})
> > 
> >     m,n = size(pos)
> >     r,s = size(Acp)
> >     m == r || throw(DimensionMismatch(""))
> >     res = fill(Inf,(n,))
> >     for i in 1:n
> >     
> >         for j in 1:s
> >         
> >             sm = 0.
> >             for k in 1:m
> >             
> >                 sm += abs2(pos[k,i] - Acp[k,j])
> >             
> >             end
> >             if sm < res[i]
> >             
> >                 res[i] = sm
> >             
> >             end
> >         
> >         end
> >     
> >     end
> >     res
> > 
> > end
> > 
> > On my machine timing the second execution (the first execution includes
> > compile time) I get
> > 
> > julia> @time mindist(pos,Acp);
> > elapsed time: 0.002806999 seconds (744 bytes allocated)
> 
> Thank you. Very good ideas there also.
> 
> 
> Just a last related question: is there any way in Julia to work on complete
> vector/matrices (without unrolling) without allocating stuff? For instance
> 
> t = zeros(Float64, 3)
> a = rand(Float64, 3)
> b = rand(Float64, 3)
> 
> t[:] = a[:]
> t[:] .*= b[:]
> 
> but without allocation? @devec reduces it by half but it's still not zero.
> There might be no better alternative yet.

Reply via email to