On 3/27/12 6:34 PM, Francesc Alted wrote:
> Another option that occurred to me recently is to save all your 
> columns as unidimensional arrays (Array object, or, if you want 
> compression, a CArray or EArray), and then use them as components of a 
> boolean expression using the class `tables.Expr`.  For example, if a, 
> b and c are unidimensional arrays of the same size, you can do:
>
> bool_cond = tables.Expr('(2*a>0) & (cos(b) < .5) & (c**3 < 1)')
> indices = [ind for ind, bool_val in bool_cond if bool_val ]

Of course, the above line needs to read:

indices = [ind for ind, bool_val in enumerate(bool_cond) if bool_val ]

> results = your_dataset[indices]

Another solution, probably faster, although you need to make sure that 
you have memory enough to keep your boolean array, is this:

bool_cond = tables.Expr('(2*a>0) & (cos(b) < .5) & (c**3 < 1)')
bool_arr = bool_cond.eval()
results = your_dataset[bool_arr]

-- 
Francesc Alted


------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Pytables-users mailing list
Pytables-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pytables-users

Reply via email to