# [Numpy-discussion] Constant array of tuples

Christopher Barker Chris.Barker@noaa....
Fri Apr 10 18:11:19 CDT 2009

```Frank Peacock wrote:
> Hello
>
> I would like to know whether there is a simple way to construct a constant
> array of tuples:
>
> How do I construct an array of size (width*height) where each element is
> (w,x,y,z)

Is this what you want?

a = np.empty((5,6), dtype=np.object)
>>> for i in range(len(a.flat)):
...   a.flat[i] = (1,2,3,4)
...
>>> a
array([[(1, 2, 3, 4), (1, 2, 3, 4), (1, 2, 3, 4), (1, 2, 3, 4),
(1, 2, 3, 4), (1, 2, 3, 4)],
[(1, 2, 3, 4), (1, 2, 3, 4), (1, 2, 3, 4), (1, 2, 3, 4),
(1, 2, 3, 4), (1, 2, 3, 4)],
[(1, 2, 3, 4), (1, 2, 3, 4), (1, 2, 3, 4), (1, 2, 3, 4),
(1, 2, 3, 4), (1, 2, 3, 4)],
[(1, 2, 3, 4), (1, 2, 3, 4), (1, 2, 3, 4), (1, 2, 3, 4),
(1, 2, 3, 4), (1, 2, 3, 4)],
[(1, 2, 3, 4), (1, 2, 3, 4), (1, 2, 3, 4), (1, 2, 3, 4),
(1, 2, 3, 4), (1, 2, 3, 4)]], dtype=object)

Interestingly:

>>> a[:,:] = (1,2,3,4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: shape mismatch: objects cannot be broadcast to a single shape

Doesn't work - even though (1,2,3,4) is a tuple, which is a single object.

Anyway, I suspect that that's not really what you want, but rather, you
might be looking for:

>>> a = np.zeros((w,h,4), np.float)
>>> a[:,:] = (1,2,3,4)
>>> a
array([[[ 1.,  2.,  3.,  4.],
[ 1.,  2.,  3.,  4.],
[ 1.,  2.,  3.,  4.],
[ 1.,  2.,  3.,  4.],
[ 1.,  2.,  3.,  4.]],

[[ 1.,  2.,  3.,  4.],
[ 1.,  2.,  3.,  4.],
[ 1.,  2.,  3.,  4.],
[ 1.,  2.,  3.,  4.],
[ 1.,  2.,  3.,  4.]],

[[ 1.,  2.,  3.,  4.],
[ 1.,  2.,  3.,  4.],
[ 1.,  2.,  3.,  4.],
[ 1.,  2.,  3.,  4.],
[ 1.,  2.,  3.,  4.]]])

-Chris

--
Christopher Barker, Ph.D.
Oceanographer

Emergency Response Division
NOAA/NOS/OR&R            (206) 526-6959   voice
7600 Sand Point Way NE   (206) 526-6329   fax
Seattle, WA  98115       (206) 526-6317   main reception

Chris.Barker@noaa.gov
```