Hey John,

Ah geez, copy!() was only 2 lines lower than copy() in abstractarray.jl. 
Thanks!


On Thursday, 2 October 2014 18:25:22 UTC-4, John Myles White wrote:
>
> Why not use copy!
>
>   -- John
>
> On Oct 2, 2014, at 3:24 PM, Roy Wang <[email protected] <javascript:>> 
> 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