[SciPy-user] Record array help
Stéfan van der Walt
stefan at sun.ac.za
Mon May 19 10:55:35 EDT 2008
Hi Johann
2008/5/19 Johann Rohwer <jr at sun.ac.za>:
> Is there any extended documentation/tutorial on record arrays?
There is an introduction here:
http://www.scipy.org/RecordArrays
> 1. Is it possible to change the dtype of a field after the record array has
> been created?
It can be done, but often it is not very useful:
In [3]: dt = np.dtype([('x',np.uint8),('y',np.uint8)])
In [4]: np.array([(1,2),(3,4)],dtype=dt)
Out[4]:
array([(1, 2), (3, 4)],
dtype=[('x', '|u1'), ('y', '|u1')])
In [5]: _.view(np.uint16)
Out[5]: array([ 513, 1027], dtype=uint16)
I suspect what you want to do is to change one 'column' from, say, int
to float, and reinterpret the data. For that, you'll need to make a
copy.
> 2. The CSV file has missing data points - how do I turn these into python
> 'None' elements in the record array? (If I leave that element empty in the
> CSV file, then csv2rec complains about not being able to handle the import;
> if I put 'None' in the CSV file (without quotes), then the whole field
> including the 'None' and all the other float data is converted into a string
> dtype, rendering the numerical data useless).
Maybe `numpy.loadtxt` could be of some use.
> 3. Is it possible to obtain a subset of the original data (corresponding to
> two or more columns of the CSV file) as a conventional 2D numpy array, or
> can I access the data only individually by column (i.e. field in the record
> array)?
I hope someone comes up with an elegant solution, otherwise you can make a copy:
numpy.array([data['field1'], data['field2']]).T
Regards
Stéfan
More information about the SciPy-User
mailing list