1

这一定很容易,但我对 pytables 很陌生。我的应用程序的数据集非常大,无法保存在内存中,因此我使用 PyTable CArrays。但是,我需要在非无穷大的数组中找到最大元素。在 numpy 中天真地我会这样做:

max_element = numpy.max(array[array != numpy.inf])

显然,如果不将整个数组引入内存,这在 PyTables 中是行不通的。我可以在适合内存的窗口中循环遍历 CArray,但如果没有最大/最小减少操作,我会感到惊讶。是否有一种优雅的机制来获取该数组的条件最大元素?

4

1 回答 1

4

如果您的 CArray 是一维的,则将其粘贴在单列表中可能更容易。然后您可以访问该where()方法并可以轻松地评估如下表达式。

from itertools import imap
max(imap(lamdba r: r['col'], tab.where('col != np.inf')))

这是可行的,因为where()从不一次读取所有数据并返回一个迭代器,该迭代器被移交给 map,map 被移交给 max。请注意,在 Python 3 中,您不需要导入 imap(),并且 imap() 只是内置的 map()。

不使用表格意味着您需要使用 Expr 类并自己进行更多的接线。

于 2014-01-03T07:26:31.943 回答