Is there a way to append a row to a NumPy rec.array()? For example,
x1=np.array([1,2,3,4])
x2=np.array([\'a\',\'dd\',\'xyz\',\'12\'])
x3=np.array([1.1,2,3,4])
r
Extending @unutbu's answer I post a more general function that appends any number of rows:
def append_rows(arrayIN, NewRows):
"""Append rows to numpy recarray.
Arguments:
arrayIN: a numpy recarray that should be expanded
NewRows: list of tuples with the same shape as `arrayIN`
Idea: Resize recarray in-place if possible.
(only for small arrays reasonable)
>>> arrayIN = np.array([(1, 'a', 1.1), (2, 'dd', 2.0), (3, 'x', 3.0)],
dtype=[('a', '>> NewRows = [(4, '12', 4.0), (5, 'cc', 43.0)]
>>> append_rows(arrayIN, NewRows)
>>> print(arrayIN)
[(1, 'a', 1.1) (2, 'dd', 2.0) (3, 'x', 3.0) (4, '12', 4.0) (5, 'cc', 43.0)]
Source: http://stackoverflow.com/a/1731228/2062965
"""
# Calculate the number of old and new rows
len_arrayIN = arrayIN.shape[0]
len_NewRows = len(NewRows)
# Resize the old recarray
arrayIN.resize(len_arrayIN + len_NewRows, refcheck=False)
# Write to the end of recarray
arrayIN[-len_NewRows:] = NewRows
I want to stress that pre-allocation of an array, which is at least big enough, is the most reasonable solution (if you have an idea about the final size of the array)! Pre-allocation also saves you a lot of time.