簡體   English   中英

從pyfits數據表中獲取隨機子樣本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM