如何将FITS_rec类型的FITS数据转换为多维numpy数组
解决FITS记录转多维NumPy数组的索引问题
提取结构化字段:FITS_rec属于NumPy结构化数组,直接用
np.asarray()转换会得到无法直接索引的对象数组,需先按字段拆分数据:# 从HDU中获取FITS结构化数据 fits_data = hdul[1].data # 按字段提取独立数组 time_arr = fits_data['time'] rate_arr = fits_data['rate'] error_arr = fits_data['error'] totcounts_arr = fits_data['TOTCOUNTS'] fraxexp_arr = fits_data['fraxexp']转换变长rate/error为二维数组:由于不同文件中rate/error的元素数量可能不同,先将字段数组转为列表再转成二维NumPy数组:
# 转换为可直接索引的二维数组(若所有子数组长度一致) rate_2d = np.array(rate_arr.tolist()) error_2d = np.array(error_arr.tolist())若存在子数组长度不一致的情况,
np.array()仍会返回对象数组,此时可根据需求对短数组补全或截断,或用Pandas DataFrame统一处理。组合成多维数组(可选):若需将所有字段合并为一个多维数组,先将标量字段扩展维度,再沿列拼接:
# 扩展标量字段的维度,与二维rate/error数组匹配 time_expanded = time_arr[:, np.newaxis] totcounts_expanded = totcounts_arr[:, np.newaxis] fraxexp_expanded = fraxexp_arr[:, np.newaxis] # 拼接为完整的多维数组 combined_arr = np.hstack([time_expanded, rate_2d, error_2d, totcounts_expanded, fraxexp_expanded])验证索引操作:转换完成后即可轻松索引数据,例如:
- 取第3行的第2个rate值:
rate_2d[2, 1] - 取所有行的error数据:
error_2d[:, :] - 取组合数组中第5行的time和所有rate值:
combined_arr[4, 0:5]
- 取第3行的第2个rate值:
内容的提问来源于stack exchange,提问作者Maxwell A. Fine
相关产品推荐
相关产品推荐

