A Monday 01 February 2010 15:15:45 Jon Olav Vik escrigué:
> I'd like suggestions on how to work around
> NotImplementedError: record arrays with columns with type description
> ``([('a', '
> <f8'), ('b', '<f8')],(3,))`` are not supported yet, sorry
>
> I have multivariate time-series with a fixed number of time-steps stored as
> numpy structured arrays. For example, two records with a field called "y"
> that contains an array of shape (3,) with items having fields "a" and "b".
>
> (¤¤¤ = >>> to get through Gmane's top-posting filter)
>
> ¤¤¤ x
> rec.array([([(0.0, 1.0), (2.0, 3.0), (4.0, 5.0)],),
> ([(6.0, 7.0), (8.0, 9.0), (10.0, 11.0)],)],
> dtype=[('y', [('a', '<f8'), ('b', '<f8')], 3)])
> ¤¤¤ x.y.a
> array([[ 0., 2., 4.],
> [ 6., 8., 10.]])
>
> However, it seems PyTables cannot deal with a column that contains an array
> of a structured dtype. Example:
>
> import numpy as np
> import tables as pt
> dtype = [("y", [("a", float), ("b", float)], 3)]
> x = np.arange(12.0).view(dtype, np.recarray)
> x.y.a[1] # array([ 6., 8., 10.])
> f = pt.openFile("testnest.h5", "w")
> t = f.createTable(f.root, "t", x)
> Traceback (most recent call last):
> NotImplementedError: record arrays with columns with type description
> ``([('a', '
> <f8'), ('b', '<f8')],(3,))`` are not supported yet, sorry
>
> What is the best workaround for this, given that I have a lot of existing
> code based on the assumption that each record has a field called y that
> contains a vector whose items have fields ("a", "b")?
Yes, multidimensional tables are not supported yet (although multidimensional
columns are). I plan to implement column-wise tables in the near future, and
I think that multidimensional tables would fit well within these new beasts.
> One option is to store each record as a plain float array, keeping the
> dtype as an extra attribute and converting every time I put data in or
> out.
>
> ¤¤¤ xf = x.view(float).reshape(len(x), -1)
> ¤¤¤ xf
> array([[ 0., 1., 2., 3., 4., 5.],
> [ 6., 7., 8., 9., 10., 11.]])
>
> Another is to go from a record that has a field that
> ...contains a vector whose items have fields ("a", "b")
> to
> ...has fields ("a", "b") whose items are vectors
>
> This can be stored in PyTables. However, the data in each record will be
> transposed (all time-points for each field will be contiguous).
Well, I think this is your best bet with PyTables for the moment. If this is
not enough for you, you may want to try h5py that, if I recall correctly, has
support for multidimensional tables.
Cheers,
--
Francesc Alted
------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
_______________________________________________
Pytables-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/pytables-users