I have many numpy structured arrays in a list like this example:
import numpy a1 = numpy.array([(1, 2), (3, 4), (5, 6)], dtype=[('x', int), ('y', int)]) a2 = numpy.array([(7,10), (8,11), (9,12)], dtype=[('z', int), ('w', float)]) arrays = [a1, a2]
What is the correct way to join them all together to create a unified structured array like the following?
desired_result = numpy.array([(1, 2, 7, 10), (3, 4, 8, 11), (5, 6, 9, 12)], dtype=[('x', int), ('y', int), ('z', int), ('w', float)])
This is what I'm currently using, but it is very slow, so I suspect there must be a more efficent way.
from numpy.lib.recfunctions import append_fields def join_struct_arrays(arrays): for array in arrays: try: result = append_fields(result, array.dtype.names, [array[name] for name in array.dtype.names], usemask=False) except NameError: result = array return result
You can use the numpy. concatenate() function to concat, merge, or join a sequence of two or multiple arrays into a single NumPy array. Concatenation refers to putting the contents of two or more arrays in a single array.
You can also use the function merge_arrays
of numpy.lib.recfunctions
:
import numpy.lib.recfunctions as rfn rfn.merge_arrays(arrays, flatten = True, usemask = False) Out[52]: array([(1, 2, 7, 10.0), (3, 4, 8, 11.0), (5, 6, 9, 12.0)], dtype=[('x', '<i4'), ('y', '<i4'), ('z', '<i4'), ('w', '<f8')])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With