2017-09-27 6 views
1

私は非常に簡単な質問がありますが、Googleはここで私を助けることができないようです。私はpyfitsテーブルのサブサンプルがほしいです...基本的には、行の90%、またはそのようなものを削除してください。私はdata_table.field(fieldname)でフィールドにアクセスpyfitsテーブル組織を好きpyfitsデータテーブルからランダムサブサンプルを取得

data_table = pyfits.getdata(base_dir + filename) 

ので、私は、データ構造を保持しますが、行を削除したいと思います:私はテーブルを読み込みます。

+0

'.field(fieldname)'を使う必要はありません。 'data_table [fieldname]'のような添え字構文を使うことができます( 'data_table [x]'として 'x 'はテーブルの行を返す整数です)。また、この珍しいものには特別なことはあまりありません。それはほんの華麗な[numpy.recarray](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy)です。 recarray.html) – Iguananaut

答えて

4

numpy.random.choiceを使用すると、別の配列からいくつかのランダムな選択肢を含む配列を作成できます。

あなたの場合、data_tableの「x」行が必要です。あなたは、直接テーブルの上にchoiceを使用することはできませんが、あなたはrandom.choiceのためにあなたのテーブルのlenを使用することができます。

import numpy as np 
rows_numbers_to_keep = np.random.choice(len(data_table), 2, replace=False) 

そして、インデックス、テーブル:

subsample = data_table[rows_numbers_to_keep] 

例えば(私はastropyを使用しています)PyFITS isn't developed anymore and has been migrated to astropy.io.fits理由:

>>> data 
FITS_rec([(1, 4, 7), (2, 5, 8), (3, 6, 9), (4, 7, 0)], 
     dtype=(numpy.record, [('a', 'S21'), ('b', 'S21'), ('c', 'S21')])) 

>>> data[np.random.choice(len(data), 2, replace=False)] # keep 2 distinct rows 
FITS_rec([(1, 4, 7), (4, 7, 0)], 
     dtype=(numpy.record, [('a', 'S21'), ('b', 'S21'), ('c', 'S21')])) 

あなたが同じ行を複数回取得できるようにしたい場合は、を使用することができます

関連する問題