# Sample using numpy.indices

```print("====intro.====")
def c_indices(t):
ni = np.indices(t)
print(ni.shape)
print(ni)
print("==")

c_indices((0,1))
c_indices((1,2))
c_indices((2,3))
c_indices((2,3,1))
c_indices((2,3,3))
c_indices((4,5))

def cartesian(arrays):
arrays = [np.asarray(a) for a in arrays]
print(arrays)
for x in arrays:
print(len(x))
shape = (len(x) for x in arrays)
print(shape)

print("==ix==")
ix = np.indices(shape, dtype=int)
print(ix)
ix = ix.reshape(len(arrays), -1)
print(ix)
ix = ix.T

for n, arr in enumerate(arrays):
ix[:, n] = arrays[n][ix[:, n]]

return ix

print (cartesian(([1, 2, 3], [4, 5], [6, 7])))
```
```====intro.====
(2, 0, 1)
[]
==
(2, 1, 2)
[[[0 0]]

[[0 1]]]
==
(2, 2, 3)
[[[0 0 0]
[1 1 1]]

[[0 1 2]
[0 1 2]]]
==
(3, 2, 3, 1)
[[[[0]
[0]
[0]]

[[1]
[1]
[1]]]

[[[0]
[1]
[2]]

[[0]
[1]
[2]]]

[[[0]
[0]
[0]]

[[0]
[0]
[0]]]]
==
(3, 2, 3, 3)
[[[[0 0 0]
[0 0 0]
[0 0 0]]

[[1 1 1]
[1 1 1]
[1 1 1]]]

[[[0 0 0]
[1 1 1]
[2 2 2]]

[[0 0 0]
[1 1 1]
[2 2 2]]]

[[[0 1 2]
[0 1 2]
[0 1 2]]

[[0 1 2]
[0 1 2]
[0 1 2]]]]
==
(2, 4, 5)
[[[0 0 0 0 0]
[1 1 1 1 1]
[2 2 2 2 2]
[3 3 3 3 3]]

[[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]
[0 1 2 3 4]]]
==
[array([1, 2, 3]), array([4, 5]), array([6, 7])]
3
2
2
<generator object cartesian.<locals>.<genexpr> at 0x103f99410>
==ix==
[[[[0 0]
[0 0]]

[[1 1]
[1 1]]

[[2 2]
[2 2]]]

[[[0 0]
[1 1]]

[[0 0]
[1 1]]

[[0 0]
[1 1]]]

[[[0 1]
[0 1]]

[[0 1]
[0 1]]

[[0 1]
[0 1]]]]
[[0 0 0 0 1 1 1 1 2 2 2 2]
[0 0 1 1 0 0 1 1 0 0 1 1]
[0 1 0 1 0 1 0 1 0 1 0 1]]
[[1 4 6]
[1 4 7]
[1 5 6]
[1 5 7]
[2 4 6]
[2 4 7]
[2 5 6]
[2 5 7]
[3 4 6]
[3 4 7]
[3 5 6]
[3 5 7]]
```