如何在python中获得切片拟合立方体的图

时间:2016-06-06 05:04:37

标签: python-2.7 matplotlib

我有一个拟合立方体文件,我想使用astropy获取切片的图像。所以我试过了:

>>> from astropy.io import fits
>>> import matplotlib.pyplot as plt
>>> hdulist=fits.open('\Users\...\MOS_017.Tb.fits')
>>> hdu=hdulist[0]
>>> plt.imshow(hdu.data[0,:,:],orgin='lower')

但后来我收到内存错误:

    Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    plt.imshow(hdu.data[0,:,:],orgin='lower')
  File "C:\Python27\lib\site-packages\astropy\utils\decorators.py", line 515, in __get__
    val = self.fget(obj)
  File "C:\Python27\lib\site-packages\astropy\io\fits\hdu\image.py", line 208, in data
    data = self._get_scaled_image_data(self._data_offset, self.shape)
  File "C:\Python27\lib\site-packages\astropy\io\fits\hdu\image.py", line 662, in _get_scaled_image_data
    data = np.array(raw_data, dtype=new_dtype)
MemoryError

我不知道该怎么做。请帮忙......

2 个答案:

答案 0 :(得分:0)

来自星座website

  

使用大文件   open()函数支持memmap = True参数,该参数允许使用mmap访问每个HDU的数组数据,而不是一次性读入内存。这对于处理不能完全适合物理内存的非常大的数组特别有用。

因此,对于您的示例,以下内容应该有所帮助,

from astropy.io import fits
import matplotlib.pyplot as plt
hdulist=fits.open('\Users\...\MOS_017.Tb.fits', memmap=True)
hdu=hdulist[0]
plt.imshow(hdu.data[0,:,:],orgin='lower')

更新:随着数据的缩放,一旦提取数据,关闭文件可能会有所帮助,

from astropy.io import fits
import matplotlib.pyplot as plt
hdulist=fits.open('\Users\...\MOS_017.Tb.fits')
hdu=hdulist[0]
hdulist.close()

plt.imshow(hdu.data[0,:,:],orgin='lower')

或者

 hdu = fits.getdata('\Users\...\MOS_017.Tb.fits')
 plt.imshow(hdu.data[0,:,:],orgin='lower')

答案 1 :(得分:0)

当我尝试时问题解决了:

plt.imshow(hdu.data[0,200,:,:],origin='lower')

我是新手适合文件所以我不确定它是如何正确但我认为这可能是因为我的文件有维度= 4。 如果有人能解释一下,我会很高兴。

相关问题