包以有效地逐个对象读取大尺寸数组
fitsiochunked的Python项目详细描述
打包到顺序有效地逐个对象读取大尺寸数组
- 自由软件:麻省理工学院许可证
功能
- 在给定的固定内存限制内连续读取大容量文件
快速使用
下面的例子展示了一个适合阅读的例子 在2048MB内存限制内的HDU,假设光曲线为 存储在行中:
importnumpyasnpimportfitsioimportfitsiochunkedasfcwithfitsio.FITS(filename)asinfile:hdu=infile['flux']napertures=hdu.get_info()['ndim'][0]mean_flux=np.zeros(napertures)forchunkinfc.chunks(hdu,memory_limit_mb=2048):# `chunk` is a namedtuple with `.data` and `.slice` propertieschunk_data=chunk.dataprint('Data shape:',chunk_data.shape)print('Data dtype:',chunk_data.dtype)chunk_slice=chunk.sliceprint('Chunk starting from aperture:',chunk_slice.start)print('Chunk up to:',chunk_slice.stop)chunk_mean=np.average(chunk_data,axis=1)mean_flux[chunk_slice]=chunk_mean
库处理的HDU数量很少:
importnumpyasnpimportfitsioimportfitsiochunkedasfcwithfitsio.FITS(filename)asinfile:hjd_hdu=infile['hjd']flux_hdu=infile['flux']fluxerr_hdu=infile['fluxerr']napertures=flux_hdu.get_info()['ndim'][0]mean_flux=np.zeros(napertures)forchunksinfc.chunks(hjd_hdu,flux_hdu,fluxerr_hdu,memory_limit_mb=2048):# chunks is a tuple of chunkshjd_chunk,flux_chunk,fluxerr_chunk=chunks# `chunk` is a namedtuple with `.data` and `.slice` propertiesflux_chunk_data=flux_chunk.dataprint('Data shape:',flux_chunk_data.shape)print('Data dtype:',flux_chunk_data.dtype)# and so on
注意:如果提供了多个hdu,则memory_limit_mb和 chunksize到chunks的参数应用于每个hdu,即三个hdu和 2048MB的内存限制将导致3x2048=6144MB的内存使用。
安装
使用pip:
安装pip install fitsiochunked
# or get the latest development version from github
pip install git+https://github.com/mindriot101/fitsiochunked
或下载并运行安装文件:
git clone https://github.com/mindriot101/fitsiochunked
cd fitsiochunked
python setup.py install
详细信息
高级接口是chunks函数,它构建 ChunkedAdapter对象包装fitsio.ImageHDU对象。
ChunkedAdapter包装了一个fitsiohdu对象。建造时, 它变成了一个可调用的,以块的形式在hdu中生成图像数据。
chunkSize可以用参数设置 chunksize,每次只生成chunksize行, 或者使用memory_limit_mb,而尝试(没有承诺!)到 自动计算适合的光曲线数 memory_limit_mbMB内存。