# [Numpy-discussion] Tuple outer product?

Robert Kern robert.kern@gmail....
Fri Sep 25 14:33:21 CDT 2009

```On Fri, Sep 25, 2009 at 14:19, Alan G Isaac <aisaac@american.edu> wrote:
> I do not see what is wrong with itertools.product,
> but if you hate it, you can use numpy.meshgrid:
>
>>>> np.array(np.meshgrid([1,2,3],[4,5,6])).transpose()
> array([[[1, 4],
>         [1, 5],
>         [1, 6]],
>
>        [[2, 4],
>         [2, 5],
>         [2, 6]],
>
>        [[3, 4],
>         [3, 5],
>         [3, 6]]])

If you need more than two item sets, or are using Python 2.5:

import numpy as np

def cartesian_product(*items):
items = map(np.asarray, items)
lengths = map(len, items)
n = np.arange(np.product(lengths))
results = []
for i in range(-1, -len(items)-1, -1):
j = n % lengths[i]
results.insert(0, items[i][j])
n -= j
n //= lengths[i]
results = np.column_stack(results)
results.shape = tuple(lengths + [len(items)])
return results

The final shape manipulations are, of course, optional.

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
-- Umberto Eco
```