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