This explanation should maybe go straight in our FAQ :-)

> On Jul 23, 2014, at 3:12 PM, Alireza Nejati <[email protected]> wrote:
> 
> John, just to give some explanation: push! is there as an efficient push 
> operation - one that ideally takes O(1) time because it simply extends the 
> vector in-place rather than copying everything to a new vector. (In practice, 
> though, it takes slightly longer than O(1) time because of the overhead of 
> occasionally allocating a new array). Julia stores arrays in column-major 
> order, so you can push a new column on to a matrix by pushing the column to a 
> 1d array and then reshaping, as Ivar said. But you can't do the same with 
> rows, because there is no way to append a new row to a matrix in an in-place 
> fashion. You have to shift all the array elements around in memory.
> 
> The suggestions above are both good, and another way would be to simply 
> create row matrix by appending columns instead. At the end, just transpose 
> the matrix. The transpose operation does add O(n) overhead but depending on 
> what you're doing a single transpose at the end could be much more efficient 
> than cat'ing at each iteration.
> 
> 
> 
>> On Thursday, July 24, 2014 7:22:01 AM UTC+12, john pollack wrote:
>> Hi. I want to create a 2-column array.It should be empty at first, then I 
>> should be able to add rows to it. I was able to do this by : 
>> 
>> A = Array(Float64,(0,2)) 
>> 
>> A = vcat(A , [ 1 2 ] ) 
>> 
>> However, I couldn't use push! function for this. Is it possible to use push! 
>> function for this aim, and are there any substantial performance differences 
>> between push! and vcat functions  ?
>> Thanks for any help.

Reply via email to