我有一个文件(如果你想知道,它来自Zemax,格式为PSF),看起来像这样:
Listing of FFT PSF Data
File : C:\G_Drive\Projects\MSE\Telescope\AAO_designs\MSE_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 Data\r\n'
最后,我在这里找到了一些类似的问题:读取 Unicode 元素到 NumPy 数组中,但是它:
s = codecs.open(path_in + files[0], encoding='iso-8859-1').read()
im = np.loadtxt(s)
我遇到了"IOPub数据速率超过限制"的错误消息,尽管我已经大幅提高了速率。
loadtxt
函数有一个encoding
参数。也许你可以升级你的SciPy包? - lenzencoding
参数的loadtxt
函数!非常感谢@lenz。 - Nicolas