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