Ah, yes, my code was actually
mapreduce(x->x,vcat,[f(k)' for k = 1:n])
Your method is a lot simpler, thanks! Didn’t know about the … syntax.
On 26 Dec 2013, at 2:51 pm, Kevin Squire <[email protected]> wrote:
>
> On Wed, Dec 25, 2013 at 7:20 PM, Sheehan Olver <[email protected]> wrote:
> Suppose f(k) returns a Array{Float64,1}, and I want to construct an
> Array{Float64,2} whose kth row is f(k). What's the best way to do this?
> Right now I'm using
>
> mapreduce(x->x,vcat,[f(k) for k = 1:n])
>
> where the point of the mapreduce is to convert the Array{Any,1} to
> Array{Float64,2}. But it seems like it should be simpler.
>
> First, it seems like f(k) returns a row vector (which is a 1xn matrix of type
> Array{Float64, 2}), rather than a column vector of type Array{Float64, 1}.
> Otherwise, your mapreduce code above would produce one long Array{Float64, 1}
> vector.
>
> If f(k) actually returns a column vector, you could do
>
> hcat([f(k) for k = 1:n]...)'
>
> This concatenates the column vectors horizontally, then takes a transpose to
> put each return value in a row. In my tests, that returns an Array{Float64,
> 2}, even though the input is an Array{Any,1}.
>
> Since Julia uses column major order, you might consider not taking the
> transpose, and leaving the return values in successive columns, rather than
> successive rows. But that depends on what you're actually doing.
>
> Cheers,
>
> Kevin
>
> P.S. I'm testing on a recently compiled version from master. If you're using
> the current release version (v0.2), there's a small chance you might have
> different results, although I'm pretty sure it should be the same.