Python 从fits rec转换为ndaray时丢失信息
我加载了一个fits文件,并将Python 从fits rec转换为ndaray时丢失信息,python,numpy,pyfits,Python,Numpy,Pyfits,我加载了一个fits文件,并将fitsrec数据转换为numpyndarray: import pyfits import os, numpy as np dataPath ='irac1_dataset.fits' hduTab=pyfits.open(dataPath) data_rec = np.array(hduTab[1].data) data=data_rec.view(np.float64).reshape(data_rec.shape + (-1,)) 我发现在数据中存在一些
fitsrec
数据转换为numpyndarray
:
import pyfits
import os, numpy as np
dataPath ='irac1_dataset.fits'
hduTab=pyfits.open(dataPath)
data_rec = np.array(hduTab[1].data)
data=data_rec.view(np.float64).reshape(data_rec.shape + (-1,))
我发现在数据中存在一些rec中不存在的nan
:
data_rec[3664]
(2.52953742092, 3.636058484, -3.0, 1.16584000133, 0.13033115092, 0.0545114121049, 0.0977915267677, 0.0861630982921, 0.0935291710016)
data[3664]
array([ 8.01676073e+230, -1.68253090e-183, 1.10670705e-320,
-5.38247269e-235, nan, 3.19504591e+186,
-6.19704421e+125, -1.40287783e+079, 1.94744862e+094])
正如你所看到的,这些值发生了显著的变化,这是怎么可能的呢
关于hduTab[1]。数据:
data_rec = hduTab[1].data
>>> data_rec.dtype
dtype((numpy.record, [('entr_35_1', '>f8'), ('kurt_5_1', '>f8'), ('skew_23_1', '>f8'), ('skew_35_1', '>f8'), ('mean_23_2', '>f8'), ('mean_35_2', '>f8'), ('stdDev_23_1', '>f8'), ('stdDev_35_1', '>f8'), ('pixVal', '>f8')]))
是一张numpy唱片是`>f8'把你搞砸了
In [380]: dt= [('entr_35_1', '>f8'), ('kurt_5_1', '>f8'), ('skew_23_1', '>f8'),
...: ('skew_35_1', '>f8'), ('mean_23_2', '>f8'), ('mean_35_2', '>f8'), ('st
...: dDev_23_1', '>f8'), ('stdDev_35_1', '>f8'), ('pixVal', '>f8')]
In [382]: np.dtype(dt)
Out[382]: dtype([('entr_35_1', '>f8'),....('pixVal', '>f8')])
In [383]: np.array([(2.52953742092, 3.636058484, -3.0, 1.16584000133, 0.13033115
...: 092, 0.0545114121049, 0.0977915267677, 0.0861630982921, 0.093529171001
...: 6)],dtype=dt)
Out[383]:
array([ ( 2.52953742, 3.63605848, -3., 1.16584, 0.13033115, 0.05451141, 0.09779153, 0.0861631, 0.09352917)],
dtype=[('entr_35_1', '>f8'), ('kurt_5_1', '>f8'), ('skew_23_1', '>f8'), ('skew_35_1', '>f8'), ('mean_23_2', '>f8'), ('mean_35_2', '>f8'), ('stdDev_23_1', '>f8'), ('stdDev_35_1', '>f8'), ('pixVal', '>f8')])
In [384]: x=_
float
视图具有nan
和无法识别的值:
In [385]: x.view(float)
Out[385]:
array([ 8.01676073e+230, -1.68253090e-183, 1.10670705e-320,
-5.38247269e-235, nan, 3.19504591e+186,
-6.19704421e+125, -1.40287783e+079, 1.94744862e+094])
但是使用f8查看与输入匹配:
In [386]: x.view('>f8')
Out[386]:
array([ 2.52953742, 3.63605848, -3. , 1.16584 , 0.13033115,
0.05451141, 0.09779153, 0.0861631 , 0.09352917])
然后我可以使用
astype
转换成float
,(显然是把你搞砸了的是`>f8'
In [380]: dt= [('entr_35_1', '>f8'), ('kurt_5_1', '>f8'), ('skew_23_1', '>f8'),
...: ('skew_35_1', '>f8'), ('mean_23_2', '>f8'), ('mean_35_2', '>f8'), ('st
...: dDev_23_1', '>f8'), ('stdDev_35_1', '>f8'), ('pixVal', '>f8')]
In [382]: np.dtype(dt)
Out[382]: dtype([('entr_35_1', '>f8'),....('pixVal', '>f8')])
In [383]: np.array([(2.52953742092, 3.636058484, -3.0, 1.16584000133, 0.13033115
...: 092, 0.0545114121049, 0.0977915267677, 0.0861630982921, 0.093529171001
...: 6)],dtype=dt)
Out[383]:
array([ ( 2.52953742, 3.63605848, -3., 1.16584, 0.13033115, 0.05451141, 0.09779153, 0.0861631, 0.09352917)],
dtype=[('entr_35_1', '>f8'), ('kurt_5_1', '>f8'), ('skew_23_1', '>f8'), ('skew_35_1', '>f8'), ('mean_23_2', '>f8'), ('mean_35_2', '>f8'), ('stdDev_23_1', '>f8'), ('stdDev_35_1', '>f8'), ('pixVal', '>f8')])
In [384]: x=_
float
视图具有nan
和无法识别的值:
In [385]: x.view(float)
Out[385]:
array([ 8.01676073e+230, -1.68253090e-183, 1.10670705e-320,
-5.38247269e-235, nan, 3.19504591e+186,
-6.19704421e+125, -1.40287783e+079, 1.94744862e+094])
但是使用f8查看与输入匹配:
In [386]: x.view('>f8')
Out[386]:
array([ 2.52953742, 3.63605848, -3. , 1.16584 , 0.13033115,
0.05451141, 0.09779153, 0.0861631 , 0.09352917])
然后我可以使用astype
转换成float
,(这显然是数据记录的dtype
是什么?或者更好的是,给出更多关于hduTab[1]的信息.data
。我没有使用过pyfits
。你到底想做什么?因为我不知道你为什么要对数组类型进行这些操作。我必须转换fits文件的内容(整个表)进入一个numpy数组data\u rec
的dtype
是什么?或者更好,提供有关hduTab[1]的更多信息.data
。我没有使用过pyfits
。你到底想做什么?因为我不知道你为什么要对数组类型进行这些操作。我必须将fits文件(整个表)的内容转换为numpy数组