[SciPy-user] Record Array: How to add a column?
Robert Kern
robert.kern at gmail.com
Mon Oct 13 20:41:24 EDT 2008
On Mon, Oct 13, 2008 at 19:22, Marc Berthoud <mgb11 at cornell.edu> wrote:
> What is the best way to add a column to a record array?
>
> Example:
> Add to this array
> recarray( [ ( 'alpha' , 1 ) , ( 'beta ' , 2 ) , ( 'gamma' , 3 ) ] ,
> dtype = [ ( 'NAMES' , '|S5' ) , ( 'NR' , '>i2' ) ] )
> the following column
> array( [ 3.1 , 3.5 , 8.1 ] )
> to make that array
> recarray( [ ( 'alpha' , 1, 3.1 ), ( 'beta ' , 2 , 3.5 ) , ( 'gamma' ,
> 3 , 8.1 ) ] ,
> dtype = [ ( 'NAMES' , '|S5' ) , ( 'NR' , '<i2' ) , ( 'VAL' , '<f4' ) ] )
> any ideas?
>
> At this point the nicest way I know to do this is as follows:
> names = list( oldarray.dtype.names ) # get the record names
> names.append( 'VAL' ) # add the name for the new column
> olddescr = oldarray.dtype.descr # get the old type descriptor
> formats = [ olddescr[0][1] ] # initialize formats list, enter first
> format
> arrays = [ oldarray[ olddescr[0][0] ] ] # initialize arrays list,
> enter first array
> for i in range( 1 , len(olddescr) ) : # loop over remaining columns
> formats.append( olddescr[i][1] ) # add format of column
> arrays.append( oldarray[ olddescr[i][0] ] ) # add array of column
> formats.append( '<f4' ) # add format of new column
> arrays.append( array( [3.1,3.5,8.1] ) ) # add array of new column
> newarray = fromarrays( arrays , names = names , formats = formats )
> # make new record array
> but that is very ugly programming.
> Any Ideas?
This is somewhat more straightforward:
http://projects.scipy.org/pipermail/numpy-discussion/2007-September/029357.html
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
-- Umberto Eco
More information about the SciPy-User
mailing list