A Tuesday 30 November 2010 15:57:12 Charles Krohn escrigué:
> Thanks again for taking a look.  What do you mean by "work
> incorrectly"? Will where() return the wrong rows for conditions
> involving columns with NaNs?  Could this happen on any column with
> NaNs?

Exactly.  NaNs behave in a strange way:

>>> np.nan < 1
False
>>> np.nan >= 1
False
>>> np.nan == np.nan
False

so you cannot establish a relation of order with them (unless this 
support is done explicitly in some way or in another).  That renders 
indexes containing NaNs basically useless.  By using your single-column 
table, see the result of a query without indexing:

>>> f_ni = tables.openFile("/tmp/test.h5", "r")
>>> len([r.nrow for r in f_ni.root.test.where("(col<1.1)&(col>.5)")])
156813

See a query with the column indexed:

>>> f_idx = tables.openFile("/tmp/indexed_test.h5", "r")
>>> len([r.nrow for r in f_idx.root.test.where("(col<1.1)&(col>.5)")])
0

My suggestion is that you replace the NaN's in your columns with other 
values, or even with +inf or -inf.  In this case you can use indexation 
without problem.

Hope this helps,

-- 
Francesc Alted

------------------------------------------------------------------------------
Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
Tap into the largest installed PC base & get more eyes on your game by
optimizing for Intel(R) Graphics Technology. Get started today with the
Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs.
http://p.sf.net/sfu/intelisp-dev2dev
_______________________________________________
Pytables-users mailing list
Pytables-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pytables-users

Reply via email to