[Numpy-discussion] record iteration (convert a 0-d array, iteration over non-sequence)

John Parejko parejkoj at speakeasy.net
Fri Jun 23 20:04:49 CDT 2006


Greetings!  I'm having trouble using records.  I'm not sure whether to 
report this as a bug, but it certainly isn't a feature!  I would like to be 
able to iterate over the individual rows in a record array, like so:

 >>> import numpy.core.records as rec
 >>> x=rec.array([[1,1.1,'1.0'],[2,2.2,'2.0']], 
formats='i4,f8,a4',names=['i','f','s'])

 >>> type(x[0])
<class 'numpy.core.records.record'>

 >>> x[0].tolist()
Traceback (most recent call last):
   File "<stdin>", line 1, in ?
ValueError: can't convert a 0-d array to a list

 >>> [i for i in x[0]]
Traceback (most recent call last):
   File "<stdin>", line 1, in ?
TypeError: iteration over non-sequence

Am I going about this wrong?  I would think I should be able to loop over an 
individual row in a record array, or turn it into a list.  For the latter, I 
wrote my own thing, but tolist() should work by itself.  Note that in 
rec2list, I need to use range(len(line)) because the list comprehension 
doesn't work correctly:

def rec2list(line):
     """Turns a single element record array into a list."""
     return [line[i] for i in xrange(len(line))]
#...

I will file a bug, unless someone tells me I'm going about this the wrong way.

Thanks for your help
John

-- 
*************************
John Parejko
Department of Physics and Astronomy
Drexel University
Philadelphia, PA
**************************




More information about the Numpy-discussion mailing list