バイナリ テーブルを含む 60GB の FITS ファイルがあります。このテーブルを一度に 1 つの行/エントリ/行/ブロック* で読み取り (および処理) したいと思います。
(※正確な命名法はわかりません)
私はpyfitsを使用していますが、やりたいことは簡単に言えば次のとおりです。
import pyfits
hdulist = = pyfits.open("file.fits")
# the binary table has to be in the 2nd extension
# hence it is in hdulist[1]
n_entries = hdulist[1].header['NAXIS2']
for i in xrange(n_entries):
entry = hdulist[1].data[i] # I am confused what happens at this step
# now do stuff with the values in entry
# .....
変数entry
の型<class 'pyfits.fitsrec.FITS_record'>
は、バイナリ テーブルの列数と同じ長さです。ただし、次の行でバイナリ テーブル全体がメモリに読み込まれるように見えますentry = hdulist[1].data[i]
。
pyfits のドキュメントを調べましたが、テーブル エントリごとに (または一度に小さなエントリ セットで) バイナリ テーブル拡張からデータを読み取るようなメソッドが見つかりません。テーブルから特定のエントリを選択するのではなく、単に順番にスキャンするだけです。
私の質問は次のとおりです。
0)hdulist[1].data[i]
ステップで何が起きているか? すべてがメモリに読み込まれるのはなぜですか? (これを回避する方法はありますか?)
1)私は何かを逃しましたか?実際にpyfitsは私が望むことをすることができますか?
2)別のpythonライブラリはありますか?(つまり、FITS 拡張でバイナリ テーブルを使用する)
3)そうでない場合、データを別のバイナリ(または他の圧縮/非ASCII)形式(FITSではない)で書き直して、他のpythonライブラリまたはモジュールを見つけて、やりたいことを実行できますか?