Is there an easy way to add a record/row to a numpy recarray without creating a new recarray? Let's say I have a recarray that takes 1Gb开发者_C百科 in memory, I want to be able to add a row to it without having python take up 2Gb of memory temporarily.
You can call yourrecarray.resize
with a shape which has one more row, then assign to that new row. Of course. numpy
might still have to allocate completely new memory if it just doesn't have room to grow the array in-place, but at least you stand a chance!-)
Since an example was requested, here comes, modified off the canonical example list...:
>>> import numpy
>>> mydescriptor = {'names': ('gender','age','weight'), 'formats': ('S1', 'f4', 'f4')}
>>> a = numpy.array([('M',64.0,75.0),('F',25.0,60.0)], dtype=mydescriptor)
>>> print a
[('M', 64.0, 75.0) ('F', 25.0, 60.0)]
>>> a.shape
(2,)
>>> a.resize(3)
>>> a.shape
(3,)
>>> print a
[('M', 64.0, 75.0) ('F', 25.0, 60.0) ('', 0.0, 0.0)]
>>> a[2] = ('X', 17.0, 61.5)
>>> print a
[('M', 64.0, 75.0) ('F', 25.0, 60.0) ('X', 17.0, 61.5)]
精彩评论