什么是> i2数据类型Python

时间:2015-07-06 10:22:05

标签: python python-2.7

我有一些数组文件是数组...例如:

[[142 132 138 ..., 130 128 129]
[137 134 135 ..., 124 117 124]
[127 138 131 ..., 131 131 127]
..., 
[129 131 136 ..., 123 130 117]
[134 141 133 ..., 133 124 121]
[133 138 136 ..., 131 122   0]]

这个文件有2.8 MiB,类型为>i2 ..文件很合适,我知道它的类型是int16,但>i2在Python中是什么意思?

如何将此数据文件转换为float

所以我有三个数据拟合文件,暗框,平场和图像。我需要创建图像校正。我需要将此数据文件转换为float并进行一些操作(数据文件值的除法和差异),然后将结果转换为原始数据类型int

我创建了进行修正的脚本但是我有问题,结果修正图像有6.3 MiB而且没有2.8 MiB:

import numpy as np
import pyfits
from matplotlib import pyplot as plt
import glob


dark=glob.glob('.../ha/dark/*.fits')
flat=glob.glob('.../ha/flat/*.fits')
img=glob.glob('.../ha/*.fits')

sumd0 = pyfits.open(dark[0])
sumdd=sumd0[0].data
sumdd.astype(float)
for i in range(1,len(dark)):
     sumdi=pyfits.open(dark[i])
     sumdi=sumdi[0].data
     sumdd=sumdd.astype(float)+sumdi.astype(float)
dd=sumdd/len(dark)

sumf0 = pyfits.open(flat[0])
sumff=sumf0[0].data
sumff.astype(float)
for i in range(1,len(flat)):
     sumfi=pyfits.open(flat[i])
     sumfi=sumfi[0].data
     sumff=sumff.astype(float)+sumfi.astype(float)

ff=sumff/len(flat)

df=(ff-dd)

for n in range(len(img)):
    with pyfits.open(img[n],mode='update',memmap=True) as im:
        imgg=im[0].data
        header=im[0].header
        imgg.astype(float)
        imgg=(imgg-dd)/df
        imgg.astype(int)
plt.imshow(imgg,cmap=plt.cm.Greys_r,vmin=0.5,vmax=1.5)
plt.show()

1 个答案:

答案 0 :(得分:0)

来自numpy docs

>>> import numpy as np
>>> big_end_arr = np.ndarray(shape=(2,),dtype='>i2', buffer=big_end_str)
>>> big_end_arr[0]
1
>>> big_end_arr[1]
770
  

注意上面的> i2的数组dtype。 >表示'big-endian'(<是little-endian),i2表示'signed-end-endian'。例如,如果我们的数据表示单个无符号的4字节小端整数,则dtype字符串将是< u4。

类型说明符列在structured array文档中。