[Numpy-discussion] how to add columns

Benjamin Root ben.root at ou.edu
Wed Jul 28 11:39:20 EDT 2010


On Wed, Jul 28, 2010 at 7:43 AM, wheres pythonmonks <
wherespythonmonks at gmail.com> wrote:

> I have a rec array and I want to add an additional column.
>
> I've seen at least two solutions to this problem:
>
> mlab.rec_append_fields (matplotlib)
>
> And append_field from
> http://mail.scipy.org/pipermail/numpy-discussion/2007-September/029357.html
>
> In [19]: def append_field(rec, name, arr, dtype=None):
>    arr = np.asarray(arr)
>    if dtype is None:
>        dtype = arr.dtype
>    newdtype = np.dtype(rec.dtype.descr + [(name, dtype)])
>    newrec = np.empty(rec.shape, dtype=newdtype)
>    for field in rec.dtype.fields:
>        newrec[field] = rec[field]
>    newrec[name] = arr
>    return newrec
>
> Is there a best solution?  I don't like the matplotlib solution b/c of
> the "dll-hell" anti-pattern.  But the pure numpy solution looks like
> it has too many copies. (or are recarrays pointers-of-pointers as
> opposed to contiguous memory?)
>
> Help!
>
> W
>

W,

You can import numpy.lib.recfunctions module and use the .append_fields()
function.  I am pretty sure it is still making a copy, but it is a
numpy-native function rather than rolling your own and/or using mlab.  Note,
that it will try to turn it into a masked record array by default.  You can
turn that off by using usemask=False.

I hope that helps,

Ben Root
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20100728/e28ec824/attachment.html>


More information about the NumPy-Discussion mailing list