1

これは簡単なはずですが、私は pytables に非常に慣れていません。アプリケーションのデータセット サイズが大きすぎてメモリに保持できないため、PyTable CArray を使用しています。ただし、無限ではない配列内の最大要素を見つける必要があります。素朴にnumpyで私はこれをします:

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

明らかに、配列全体をメモリに導入しないと、PyTables では機能しません。メモリに収まるウィンドウで CArray をループすることはできましたが、最大/最小削減操作がなかったら驚くでしょう。その配列の条件付き最大要素を取得するエレガントなメカニズムはありますか?

4

1 に答える 1

4

CArray が 1 次元の場合、単一列のテーブルに貼り付ける方がおそらく簡単です。次に、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 クラスを使用し、自分でより多くの配線を行う必要があることを意味します。

于 2014-01-03T07:26:31.943 に答える