我有一个像这样的文件(Zemax的PSF(:
Listing of FFT PSF Data
File : C:G_DriveProjectsMSETelescopeAAO_designsMSE_PF_6u_1300-Shan-Nicolas_2.zmx
Title: MSE Prime Focus WFC with CLADC
Date : 2/9/2018
Configuration 1 of 4
FFT PSF
0.5510 µm at 0.5300, 0.0000 (deg).
Data spacing is 0.300 µm.
Data area is 153.600 µm wide.
Surface: Image (Focal surface)
Reference Coordinates: 2.02066E+02, 0.00000E+00
Pupil grid size: 256 by 256
Image grid size: 512 by 512
Center point is: row 257, column 256
Values are normalized to peak = 1.0
1.7638E-02 1.7079E-02 1.6531E-02 1.5996E-02 1.5475E-02 ...
因此,它具有带有文本的标题,我想象的是需要一些ISO-8859-1编码的字符。标头到512行512浮子之后,我想将其导入到一个numpy阵列中。
我从此开始:
data = ascii.read(path_in + files[0], data_start=19, encoding='iso-8859-1')
n = np.array(data)
n.shape
,但数组没有正确的形状:
(508,)
我也尝试了:
im = np.loadtxt(path_in + files[0], skiprows=19)
但是有以下错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 211: invalid start byte
和np.loadtxt不接受其他编码。
然后,我尝试了以下操作:
arr = np.fromiter(codecs.open(path_in +files[0], encoding='iso-8859-1'), np.float)
但这不喜欢标题:
ValueError: could not convert string to float: 'Listing of FFT PSF Datarn'
最后,我在这里找到了一些类似的问题:将Unicode元素读为numpy阵列,但这是:
s = codecs.open(path_in + files[0], encoding='iso-8859-1').read()
im = np.loadtxt(s)
即使我经常碰到了率,也会给我"超过IOPUB数据率"错误消息。
解决方案是将loadtxt
与Numpy 1.14一起使用,该encoding
参数。
但是,要升级到Numpy 1.14,我必须切换到Anaconda-64。