Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试使用astropy将FITS文件转换为ndarray时获取NaN值_Python_Astropy - Fatal编程技术网

Python 尝试使用astropy将FITS文件转换为ndarray时获取NaN值

Python 尝试使用astropy将FITS文件转换为ndarray时获取NaN值,python,astropy,Python,Astropy,我正在尝试使用astropy将FITS文件转换为ndarray。我正在关注这些。我使用查看FITS文件中的图像,但该文件的表格中仅填充了空值: 我从你那里得到这个文件。当我按照链接中给出的说明操作时,我的jupyter笔记本中也会出现NaN值: image_file = 'http://jsoc.stanford.edu/SUM93/D1245657400/S00000/hmi.Ic_720s.20191218_231200_TAI.3.continuum.fits' hdulist = fit

我正在尝试使用astropy将FITS文件转换为ndarray。我正在关注这些。我使用查看FITS文件中的图像,但该文件的表格中仅填充了空值: 我从你那里得到这个文件。当我按照链接中给出的说明操作时,我的jupyter笔记本中也会出现NaN值:

image_file = 'http://jsoc.stanford.edu/SUM93/D1245657400/S00000/hmi.Ic_720s.20191218_231200_TAI.3.continuum.fits'
hdulist = fits.open(image_file)
hdulist.info() 

### output:

Filename: C:\Users\yatin\.astropy\cache\download\py3\dd629fe158baf0b180d1835a3227eac4
No.    Name      Ver    Type      Cards   Dimensions   Format
  0  PRIMARY       1 PrimaryHDU       6   ()      
  1                1 CompImageHDU    106   (4096, 4096)   int16   

hdulist.verify('fix')

 ### output:
WARNING: VerifyWarning: HDU 1: [astropy.io.fits.verify]
WARNING: VerifyWarning:     Card 74: [astropy.io.fits.verify]
WARNING: VerifyWarning:         Card 'CRDER1' is not FITS standard (invalid value string: 'nan').  Fixed 'CRDER1' card to meet the FITS standard. [astropy.io.fits.verify]
WARNING: VerifyWarning:     Card 75: [astropy.io.fits.verify]
WARNING: VerifyWarning:         Card 'CRDER2' is not FITS standard (invalid value string: 'nan').  Fixed 'CRDER2' card to meet the FITS standard. [astropy.io.fits.verify]
WARNING: VerifyWarning:     Card 76: [astropy.io.fits.verify]
WARNING: VerifyWarning:         Card 'CSYSER1' is not FITS standard (invalid value string: 'nan').  Fixed 'CSYSER1' card to meet the FITS standard. [astropy.io.fits.verify]
WARNING: VerifyWarning:     Card 77: [astropy.io.fits.verify]
WARNING: VerifyWarning:         Card 'CSYSER2' is not FITS standard (invalid value string: 'nan').  Fixed 'CSYSER2' card to meet the FITS standard. [astropy.io.fits.verify]

hdulist[1].data

### output:
array([[nan, nan, nan, ..., nan, nan, nan],
       [nan, nan, nan, ..., nan, nan, nan],
       [nan, nan, nan, ..., nan, nan, nan],
       ...,
       [nan, nan, nan, ..., nan, nan, nan],
       [nan, nan, nan, ..., nan, nan, nan],
       [nan, nan, nan, ..., nan, nan, nan]], dtype=float32)

我做错了什么?

这是一个没有答案的答案,但看起来你没有做错什么。我下载了同一个文件,虽然部分文件包含NaN,但部分文件不包含NaN。当您打印4096x4096图像的数据时,它不会显示所有值,而且边界周围的大多数值似乎都是NaN(可能是光圈剪切?)。例如:

>>>> np.isnan(hdulist[1].data).all()
False
我可以看到一些非NaN类型的点:

>>> np.where(~np.isnan(hdulist[1].data))
(array([  19,   19,   19, ..., 4069, 4069, 4069]),
 array([2025, 2026, 2027, ..., 2092, 2093, 2094]))
事实上,似乎有很多非NaN值:

>>> len(np.where(~np.isnan(hdulist[1].data))[0])
12887376
如果有疑问,请尝试使用matplotlib打印数据。默认情况下,它将NAN视为空白像素:

>>> from matplotlib import pyplot as plt
>>> plt.imshow(hdulist[1].data)
我得到:

事实上,南边看起来就像一个开口


唯一一个做得“错误”的是写这个FITS文件的软件,因为我认为FITS标准在技术上没有提供一种方法来表示头关键字中的
inf
nan
值,即使它可能应该…

这是一种非答案,但看起来你没有做错什么。我下载了同一个文件,虽然部分文件包含NaN,但部分文件不包含NaN。当您打印4096x4096图像的数据时,它不会显示所有值,而且边界周围的大多数值似乎都是NaN(可能是光圈剪切?)。例如:

>>>> np.isnan(hdulist[1].data).all()
False
我可以看到一些非NaN类型的点:

>>> np.where(~np.isnan(hdulist[1].data))
(array([  19,   19,   19, ..., 4069, 4069, 4069]),
 array([2025, 2026, 2027, ..., 2092, 2093, 2094]))
事实上,似乎有很多非NaN值:

>>> len(np.where(~np.isnan(hdulist[1].data))[0])
12887376
如果有疑问,请尝试使用matplotlib打印数据。默认情况下,它将NAN视为空白像素:

>>> from matplotlib import pyplot as plt
>>> plt.imshow(hdulist[1].data)
我得到:

事实上,南边看起来就像一个开口


唯一一个做得“不对”的是写这个FITS文件的软件,因为我认为FITS标准在技术上没有提供一种方法来表示头关键字中的
inf
nan
值,即使它可能应该…

我也有同样的问题。这看起来像是太阳动力学天文台HMI连续图像或类似图像。正如您所知,他们对astropy.io.fits软件包(版本4.0.1)不支持的某些卡值使用nan。我已经发布了一个错误/问题报告。该报告还包括了一个快速修复的详细信息,您可以对安装的astropy.io.fits代码进行快速修复,直到真正的修复出来。黑客为nan提供了支持。

我也遇到了同样的问题。这看起来像是太阳动力学天文台HMI连续图像或类似图像。正如您所知,他们对astropy.io.fits软件包(版本4.0.1)不支持的某些卡值使用nan。我已经发布了一个错误/问题报告。该报告还包括了一个快速修复的详细信息,您可以对安装的astropy.io.fits代码进行快速修复,直到真正的修复出来。黑客为nan提供了支持。

我尝试用
fitsio
打开文件,我能够毫无问题地读取
hdu[1]
数据。你能试着删除“修复”步骤吗?我试着安装fitsio,但pip和conda都失败了……至于astropy,没有“修复”步骤,我在尝试执行hdulist[1]时遇到一个错误,要求我“修复”。数据我试着用
fitsio
打开文件,我能够毫无问题地读取
hdu[1]
数据。你能试着删除“修复”步骤吗?我试着安装fitsio,但pip和conda都失败了…至于astropy,没有“修复”步骤,我在尝试执行hdulist[1]时遇到一个错误,要求我“修复”。记住,乍一看,原始数据的某个预览显示某个角点上的所有NaN并不意味着整个数组是NaN填充的。记住,乍一看,原始数据的某个预览显示某个角点上的所有NaN并不意味着整个数组是NaN填充的。