Combining two record arrays
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)?
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