# Creating iterators for tuples of arbitrary dimension

**URL:** <https://discourse.julialang.org/t/creating-iterators-for-tuples-of-arbitrary-dimension/42154>\
**Category:** General Usage\
**Created:** [June 27, 2020, 1:51pm UTC](https://discourse.julialang.org/t/creating-iterators-for-tuples-of-arbitrary-dimension/42154 "2020-06-27T13:51:15Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![iamsuddhasattwa](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/iamsuddhasattwa/32/7441_2.png) [@iamsuddhasattwa](https://discourse.julialang.org/u/iamsuddhasattwa)\
**Post date:** [June 27, 2020, 1:51pm UTC](https://discourse.julialang.org/t/creating-iterators-for-tuples-of-arbitrary-dimension/42154/1 "2020-06-27T13:51:15Z")

</div>

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](https://julialang.org/blog/2016/02/iteration/) does not seem to solve this.

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [June 27, 2020, 1:57pm UTC](https://discourse.julialang.org/t/creating-iterators-for-tuples-of-arbitrary-dimension/42154/2 "2020-06-27T13:57:34Z")

</div>

> [@iamsuddhasattwa](#):
>
> [CartesianIndices](https://julialang.org/blog/2016/02/iteration/) does not seem to solve this.

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

```julia
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).

---

<div class="post-metadata">

**Author:** ![klaff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/klaff/32/7637_2.png) [@klaff](https://discourse.julialang.org/u/klaff)\
**Post date:** [June 27, 2020, 2:51pm UTC](https://discourse.julialang.org/t/creating-iterators-for-tuples-of-arbitrary-dimension/42154/3 "2020-06-27T14:51:05Z")

</div>

I’m not certain what you are trying to do, but see if this [Iteration utilities · The Julia Language](https://docs.julialang.org/en/v1/base/iterators/#Base.Iterators.product) is useful.

---

<div class="post-metadata">

**Author:** ![iamsuddhasattwa](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/iamsuddhasattwa/32/7441_2.png) [@iamsuddhasattwa](https://discourse.julialang.org/u/iamsuddhasattwa)\
**Post date:** [July 2, 2020, 9:18pm UTC](https://discourse.julialang.org/t/creating-iterators-for-tuples-of-arbitrary-dimension/42154/4 "2020-07-02T21:18:00Z")

</div>

> [@Tamas\_Papp](#):
>
> `CartesianIndices(ntuple(_ -> 1:10, d))`

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` ?

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [July 3, 2020, 5:47am UTC](https://discourse.julialang.org/t/creating-iterators-for-tuples-of-arbitrary-dimension/42154/5 "2020-07-03T05:47:27Z")

</div>

> [@iamsuddhasattwa](#):
>
> possible to convert an object of type `CartesianIndex{d}` into a vector

Yes, eg

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

```

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

---

<div class="post-metadata">

**Author:** ![dpsanders](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dpsanders/32/3573_2.png) [@dpsanders](https://discourse.julialang.org/u/dpsanders)\
**Post date:** [July 3, 2020, 7:07am UTC](https://discourse.julialang.org/t/creating-iterators-for-tuples-of-arbitrary-dimension/42154/6 "2020-07-03T07:07:27Z")

</div>

`SVector(Tuple(I))` works.

---

<div class="post-metadata">

**Author:** ![iamsuddhasattwa](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/iamsuddhasattwa/32/7441_2.png) [@iamsuddhasattwa](https://discourse.julialang.org/u/iamsuddhasattwa)\
**Post date:** [July 3, 2020, 1:45pm UTC](https://discourse.julialang.org/t/creating-iterators-for-tuples-of-arbitrary-dimension/42154/7 "2020-07-03T13:45:00Z")

</div>

> [@Tamas\_Papp](#):
>
> `CartesianIndices(ntuple(_ -> 1:10, d))`

Thank you, it worked !

---

<div class="post-metadata">

**Author:** ![iamsuddhasattwa](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/iamsuddhasattwa/32/7441_2.png) [@iamsuddhasattwa](https://discourse.julialang.org/u/iamsuddhasattwa)\
**Post date:** [July 3, 2020, 1:45pm UTC](https://discourse.julialang.org/t/creating-iterators-for-tuples-of-arbitrary-dimension/42154/8 "2020-07-03T13:45:07Z")

</div>

Thank you, it worked !
