这肯定很容易,但我对pytables很陌生。 我的应用程序的数据集大小如此之大,以至于无法保存在内存中,因此我使用 PyTable CArrays。 但是,我需要在不是无穷大的数组中找到最大元素。 天真地,我会这样做:
max_element = numpy.max(array[array != numpy.inf])
显然,如果不将整个数组引入内存,这在 PyTables 中不起作用。 我可以在适合内存的窗口中循环浏览 CArray,但如果没有最大/最小减少操作,我会感到惊讶。 是否有一种优雅的机制来获取该数组的条件最大元素?
如果你的 CArray 是一维的,那么把它放在单列表里可能更容易。 然后,您可以访问 where()
方法,并可以轻松计算如下所示的表达式。
from itertools import imap
max(imap(lamdba r: r['col'], tab.where('col != np.inf')))
这是有效的where()
永远不会一次读取所有数据并返回一个迭代器,该迭代器被传递给 map,然后传递给 max。 请注意,在 Python 3 中,你不需要导入 imap(),imap() 就变成了内置的 map()。
不使用表意味着您需要使用 Expr 类并自己做更多的接线。