[英]Get random subsample from pyfits data table
我有一個非常簡單的問題,但是Google似乎無法在這里為我提供幫助。 我想要一個pyfits表的子樣本...基本上只是刪除90%的行,或類似的東西。 我讀表與:
data_table = pyfits.getdata(base_dir + filename)
我喜歡pyfits表組織,在其中我可以使用data_table.field(fieldname)
訪問data_table.field(fieldname)
,因此我想保留數據結構,但刪除行。
您可以使用numpy.random.choice
創建一個包含來自另一個數組的多個隨機選擇的數組。
在您的情況下,您需要data_table
“ x”行。 您不能直接在表格上使用choice
,但可以將表格的len
用於random.choice
:
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不再開發,並且已遷移到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')]))
如果要允許多次獲得同一行,則可以改用replace=True
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.