# Creating iterators for tuples of arbitrary dimension

Suppose I wish to take as input some integer `d` and iterate over all tuples `(i_1, ... i_d)`, with each entry lying in 1 to 10. For example, I may take as input a vector `v` of length `d` and compute the sum `v_1 i_1 + ... + v_d i_d` for every such tuple of dimension `d`. How can I achieve this ? CartesianIndices does not seem to solve this.

Maybe I don’t understand the question, but some variant of

``````d = 2
[sum(Tuple(ι)) for ι in CartesianIndices(ntuple(_ -> 1:10, d))]
``````

should work (make `d` a `Val` type for type stability and/or wrap in a `vec` or flatten if needed, etc).

2 Likes

I’m not certain what you are trying to do, but see if this https://docs.julialang.org/en/v1/base/iterators/#Base.Iterators.product is useful.

Thanks ! `CartesianIndices(ntuple(_ -> 1:10, d))` seems like a great way to generate the indices. `I` seems to be a collection through which I can iterate, and each iteration is of type `CartesianIndex{d}`.

1. Is it possible to convert an object of type `CartesianIndex{d}` into a vector. You showed how to convert it into a `Tuple`?
2. If not, can we take a linear combinations, such as `v_1 i_1 + ... + v_d i_d` ?

Yes, eg

``````ι = CartesianIndex(1, 2, 3)
collect(Tuple(ι))
``````

but I would recommend `SVector(Tuple(ι)...)` for efficiency.

1 Like

`SVector(Tuple(I))` works.

2 Likes

Thank you, it worked !

Thank you, it worked !