Question

I have two Numpy record arrays that have exactly the same fields. What is the easiest way to combine them into one (i.e. append one table on to the other)?

Was it helpful?

Solution

Use numpy.hstack():

>>> import numpy
>>> desc = {'names': ('gender','age','weight'), 'formats': ('S1', 'f4', 'f4')} 
>>> a = numpy.array([('M',64.0,75.0),('F',25.0,60.0)], dtype=desc)
>>> numpy.hstack((a,a))
array([('M', 64.0, 75.0), ('F', 25.0, 60.0), ('M', 64.0, 75.0),
       ('F', 25.0, 60.0)], 
      dtype=[('gender', '|S1'), ('age', '<f4'), ('weight', '<f4')])

OTHER TIPS

for i in array1:
    array2.append(i)

Or (if implemented)

array1.extend(array2)

Now array1 contains also all elements of array2

#!/usr/bin/env python
import numpy as np
desc = {'names': ('gender','age','weight'), 'formats': ('S1', 'f4', 'f4')} 
a = np.array([('M',64.0,75.0),('F',25.0,60.0)], dtype=desc)
b = np.array([('M',64.0,75.0),('F',25.0,60.0)], dtype=desc)
alen=a.shape[0]
blen=b.shape[0]
a.resize(alen+blen)
a[alen:]=b[:]

This works with structured arrays, though not recarrays. Perhaps this is a good reason to stick with structured arrays.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top