我有一些数组文件是数组...例如:
[[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()
答案 0 :(得分:0)
>>> 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文档中。