Why not use copy!

  -- John

On Oct 2, 2014, at 3:24 PM, Roy Wang <[email protected]> wrote:

> 
> This kind of routine is what I'm talking about...
> 
> # copy assignment for vectors
> function copyassignment!(a::Vector,b::Vector)
>     @assert length(a) == length(b)
>     for n=1:length(a)
>         a[n]=b[n];
>     end
> end
> 
> My questions:
> 1) Is there a standard function that does this?
> 2) Is there a better way to do this so it'll handle any type of 
> multi-dimensional array of integers and floats without performance penalty?
> 
> 
> On Thursday, 2 October 2014 18:09:16 UTC-4, Roy Wang wrote:
> I often need a "copy assignment" type of operation to an existing destination 
> array of the exact same element type and size. Let's only talk about arrays 
> of concrete types, like a multi-dimensional array of floats. This is useful 
> when I write optimization solvers, and I need to store vectors or matrices 
> from the previous step. I usually pre-allocate a pair of arrays of the same 
> type and size, x and x_next, then do:
> 
> x_next = x;
>  
> at the end of each iteration of my solver.
> 
> At first, I thought using copy() (shallow copy) on them is fine to make sure 
> they are separate entities, since floating point numbers and integers are 
> concrete types in Julia. While I verified this is true (at least on arrays of 
> Float64s), I looked at (around line 202 at the time of this post), and copy() 
> seems to call copy!( similar(a), a). To my understanding, this allocates a 
> new destination array, fills it with the corresponding values from the source 
> array, then assigns the pointer of this new destination array to x_next, and 
> the garbage collector removes the old array that x_next was pointing to. This 
> is a lot of work when I just want to traverse through x_next, and assign it 
> the corresponding values from x. Please correct me if my understanding is 
> wrong!
> 
> This is a really common operation. I'd appreciate it if someone can advise me 
> whether there is already an existing method for doing this (or a better 
> solution) before I write my own.
> 
> Cheers,
> 
> Roy

Reply via email to