# [Numpy-discussion] View ND Homogeneous Record Array as (N+1)D Array?

Alexander Michael lxander.m@gmail....
Tue Mar 18 07:45:55 CDT 2008

```On Mon, Mar 17, 2008 at 4:55 PM, Robert Kern <robert.kern@gmail.com> wrote:
> On Mon, Mar 17, 2008 at 3:44 PM, Alexander Michael <lxander.m@gmail.com> wrote:
>  > Is there a way to view an N-dimensional array with a *homogeneous*
>  >  record dtype as an array of N+1 dimensions? An example will make it
>  >  clear:
>  >
>  >  import numpy
>  >  a = numpy.array([(1.0,2.0), (3.0,4.0)], dtype=[('A',float),('B',float)])
>  >  b = a.view(...) # do something magical
>  >  print b
>  >  array([[ 1.,  2.],
>  >        [ 3.,  4.]])
>  >  b[0,0] = 0.0
>  >  print a
>  >  [(0.0, 2.0) (3.0, 4.0)]
>
>
>  Just use a.view(float) and then reshape as appropriate.
>
>  In [1]: import numpy
>
>  In [2]: a = numpy.array([(1.0,2.0), (3.0,4.0)], dtype=[('A',float),('B',float)])
>
>  In [3]: a.view(float)
>  Out[3]: array([ 1.,  2.,  3.,  4.])
>
>  In [4]: b = _
>
>  In [5]: b.shape = a.shape + (-1,)
>
>  In [6]: b
>  Out[6]:
>
> array([[ 1.,  2.],
>        [ 3.,  4.]])
>
>  In [7]: b[0,0] = 0.0
>
>  In [8]: a
>  Out[8]:
>  array([(0.0, 2.0), (3.0, 4.0)],
>       dtype=[('A', '<f8'), ('B', '<f8')])

Cool. Thanks. I made a little function for doing this if anyone else
is interested:

import numpy

def unpacked_view(x):
"""Return a view of `x` with its fields unpacked. Requires all fields to
have the same type.

Examples
--------
>>> a = numpy.array(
...     [(1.0,2.0), (3.0,4.0), (5.0,6.0)],
... dtype=[('A',float),('B',float)])
>>> u = unpacked_view(a)
>>> u
array([[ 1.,  2.],
[ 3.,  4.],
[ 5.,  6.]])
>>> u.shape
(3, 2)

"""
if x.dtype.names:
ftypes = set([t for n,t in x.dtype.descr])
assert(len(ftypes) == 1)
ftype = ftypes.pop()
y = x.view(ftype)
unpacked_shape = x.shape + (-1,)
y.shape = unpacked_shape
return y
else:
return x
```