2011/11/8 Thibault North <tno...@fedoraproject.org>:
> Hello,
>
> I just discovered PyTables and am trying to find a good table structure to
> describe my data.
>
> A table is defined as:
> mytable = h5file.createTable(group, 'outputs', Foobar, "Foobar description")
>
> with a class Foobar:
>
> class Foobar(tables.IsDescription):
>  iteration = tables.Int32Col()
>  output = tables.Float64Col(shape=(1, N))
>  steps = tables.Float64Col(shape=(K, N))
>
> Now I can easily use mytable.row['iteration'] or mytable.row['output'] and
> feed them with some data.
> Unfortunately, regarding mytable.row['steps'], it is very likely that the
> array of size (K,N) won't fit in memory. Is it possible to fill it by
> iterating on K ?
> Something like  mytable.row['steps'][j] = foo with 0 < j < K and foo of size
> (1,N) doesn't work.
>
> I was thinking of using a CArray instead, but AFAIK it is not possible to
> include it directly into Foobar.

For things like that, it is always recommended to get your big
matrices out of Table objects.  In your case, you may want to put
`steps` (and probably `output` too) in external EArray objects.  For
example, if your table is going to be L rows large, then you can keep
`steps` on a EArray with shape (L, K, N). With this, accessing your
EArray data in typical table loops is easy:

for row in mytable:
    niter = row['iteration']
    myearray[row.nrow]
    # operate with this

If (K,N) arrays are too long, EArray objects lets you fill (and
retrieve) parts of it easily via indexing.  For example:

   myearray[my_l_idx, my_k_idx]

retrieves the row `my_k_idx` from `my_l_idx` element.  Similarly, you
can update parts too:

   myearray[my_l_idx, my_k_idx] = np.arange(N, dtype=np.double)

Alternatively, you can also use a CArray here, with the difference
that, with this, you should declare the final length of the container
(while this is not necessary with EArray).  Read the documentation
about EArray/CArray more carefully to explore their rich set of
features.

Hope this helps,

-- 
Francesc Alted

------------------------------------------------------------------------------
RSA(R) Conference 2012
Save $700 by Nov 18
Register now
http://p.sf.net/sfu/rsa-sfdev2dev1
_______________________________________________
Pytables-users mailing list
Pytables-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pytables-users

Reply via email to