It'd be nice to allow up to one missing dimension in the dimension tuple, and calculate it automatically. Something like this works nicely, where the missing dimension is specified by ():
function Base.reshape{N}(a::AbstractArray, dims::NTuple{N,Union(Int,())}) missing_mask = [isa(x,Tuple) for x in dims] sum(missing_mask) == 1 || throw(DimensionMismatch("new dimensions $(dims) may only have up to one omitted dimension")) sz = length(a) / sum(dims[!missing_mask]) sz == int(sz) || throw(DimensionMismatch("array size $(length(a)) must be divisible by the product of the new dimensions $(dims[!missing_mask])")) reshape(a,map(x->isa(x,Tuple) ? int(sz) : x, dims)) end Then: reshape(linspace(0, 10), ((), 1)) would do the trick. On Tuesday, April 29, 2014 2:07:41 PM UTC-4, Tom Nickson wrote: > > Is there an built-in way to convert a vector to a column matrix without > transposing twice? > I can make a matrix into a vector with vec or squeeze, but I can't see a > simple way to convert from a 1d array to a 2d without initialising it, > calling reshape and having to measure the size. > > I've put this definition in my .juliarc: > > colmat{T}(x::Array{T, 1}) = reshape(x, (length(x), 1)) > > and do colmat(linspace(0, 10)), for example. > > Is there a better way? >