# Initiating a Tuple of Arrays

Dear all,

I would like to initiate a Tuple of Vectors. I usually use `map` in this case as the return type is often of type `Tuple`, but for some reason the following MWE outputs a Vector of Vector instead of a Tuple of Vectors:

``````function initvec(T, sz)
return Vector{T}(undef, sz)
end

function tuplevecs(T, inner, outer)
return map(iter -> initvec(T, inner), 1:outer)
end

initvec(Float64, 10) #Vector{Float}
tupvec = tuplevecs(Float64, 10, 100) #Vector{Vector{Float64}}
typeof(tupvec) #Vector{Vector{Float64}}
``````

I can manually change the type via `Tuple(tupvec)`, but that seems inefficient.

Question: Is there a way to initialize a Tuple of Vectors via `map`? It does not really have to be map based either if there is another clever way to do what I intend to do.

Have you checked `ntuple`?

``````inner = 10; outer = 100
tupvec2 = ntuple( _ -> initvec(Float64,inner), outer)

julia> typeof(tupvec2)
NTuple{100, Vector{Float64}}
``````
2 Likes

This works perfect, thank you!

From what I understand, to get a `Tuple` you need to call `map` with a `Tuple`. Example:

``````julia> map(i -> Vector{Bool}(undef, 2), 1:3) # map called with AbstractVector
3-element Vector{Vector{Bool}}:
[0, 0]
[0, 0]
[0, 0]

julia> map(i -> Vector{Bool}(undef, 2), (1, 2, 3)) # map called with Tuple
(Bool[1, 0], Bool[0, 0], Bool[0, 0])
``````
3 Likes

Yeah, I’m a bit curious why @mrVeng expected tuple output in the first place. Maybe there’s some misunderstanding?

It totally makes sense now, but I did not know that the return type is chosen based on the iterator.

Thank you, that explains everything really well!