可能与Ashley 的帖子重复(但我还不能发表评论;))。
尝试将列添加到我的初始FITS_rec的子选择/样本时,我遇到了同样的问题(基于numpy的recarray);所有行都重新出现(并且似乎没有尊重这个新列的填充......)。Vlas Sokolov 提出的“ hdu_sliced._get_raw_data() ”是一个对我来说效果很好的解决方案,但我想知道:
1) Iguananaut 建议的“更好的方法”是什么?我当然需要有人帮我搜索一下;新手我感觉卡住了:$(需要留在FITS_rec中)。
2)这是预期的行为吗?意思是,我们真的想在一个“掩码数组”上工作,它会是我们原始数组的副本吗?最让我担心的是新计算列中值的“崩溃”。见下文:
# A nice FITS_rec
a1 = np.array(['NGC1001', 'NGC1002', 'NGC1003'])
a2 = np.array([11.1, 12.3, 15.2])
col1 = fits.Column(name='target', format='20A', array=a1)
col2 = fits.Column(name='V_mag', format='E', array=a2)
cols = fits.ColDefs([col1, col2])
hdu = fits.BinTableHDU.from_columns(cols)
ori_rec=hdu.data
ori_rec
`
FITS_rec([('NGC1001', 11.1), ('NGC1002', 12.3), ('NGC1003', 15.2)], dtype=(numpy.record, [('target', 'S20'), ('V_mag' , '
# Sub-selection
bug=ori_rec[ori_rec["V_mag"]>12.]
bug
FITS_rec([('NGC1002', 12.3), ('NGC1003', 15.2)], dtype=(numpy.record, [('target', 'S20'), ('V_mag', '
到目前为止,一切都很好...
# Let's add a new column
col0=bug.columns
col1 =fits.ColDefs([fits.Column(name='new',format='D',array=bug.field("V_mag")+1.)])
newbug = fits.BinTableHDU.from_columns(col0 + col1).data
FITS_rec([('NGC1001', 11.1, 13.30000019), ('NGC1002', 12.3, 16.20000076), ('NGC1003', 15.2, 0.)], dtype=(numpy.record, [('target', 'S20 '), ('V_mag', '
...AND ... NGC1002 和 NGC1003 的新列的值是正确的,但分别在 NGC1001 和 NGC1002 的行中...:|
欢迎任何启蒙:)