julia> {}
  0-element Array{Any,1}

is like python's arrays in that it can hold values of heterogenous types, 
and you can grow it with push!, e.g.

  julia> a = {}
  0-element Array{Any,1}

  julia> push!(a, "grapes")
  1-element Array{Any,1}:
   "grapes"

  julia> push!(a, 3)
  2-element Array{Any,1}:
    "grapes"
    3

If you know the type of all the things you'll be putting in your container, 
you will get better performance/memory efficiency with a typed array.

julia> b = Float64[]
0-element Array{Float64,1}

julia> push!(b, 1.0)
1-element Array{Float64,1}:
 1.0

julia> push!(b, NaN)
2-element Array{Float64,1}:
   1.0
 NaN

I think in either case, Julia is smart about growing the array by the right 
amount at the right time to get O(1) ammortized push!(), but if you have a 
guess about the eventual size of your array, you can help Julia out with 
`sizehint`.

julia> sizehint(b, 100000)

You don't have to be exactly right with sizehint--the worst that will 
happen is that you will use a little more memory than you needed to, or the 
array will have to be dynamically grown more often than it had to be. For 
this, I am most grateful. In Matlab, your choices are, AFAICT, 1) know the 
exact size of your container correctly ahead of time, 2) have terrible 
performance, or 3) allocate something that's definitely bigger than you 
need, and then keep track of how much of it you've used yourself and throw 
away the excess at the end.


On Monday, August 4, 2014 4:16:27 PM UTC-7, Neal Becker wrote:
>
> What would be similar to python list type?  A container that has an 
> efficient 
> append.  A common use is construct an empty list, then grow it by calling 
> append. 
>
>

Reply via email to