我有以下问题:我使用realines读取一行,该行如下:
参考坐标:外部参照= 0.00000E + 000,Yref = -1.20982E-002
我希望将此行转换为numpy数组,以便:
array=[nan nan nan nan 0.0 nan nan -1.20982E-002]
比我想要能够访问这个数组:
number1=array[0][4]
print(number1)
0.00000E+000
number2=array[0][6]
print(number2)
-1.20982E-002
问题是当我使用例如np.fromstring(我试过我认为所有类似的numpy例程)我无法像这样访问数组。要么我得到:
Enter file name: ERIS-NIX_106_-FOLDED-Grid_Distortion-cam2-wl3.txt
["['Reference" 'Coordinates:' 'Xref' '=' '0.00000E+000,' 'Yref' '='
"3.00947E-003\\r\\n']"]
[
Traceback (most recent call last):
File "/home/sebo/Documents/Linear Transform For Eris C1/ERIS-NIX_106_-FOLDED-Grid_Distortion(1)/Open_shift.py", line 51, in <module>
main()
File "/home/sebo/Documents/Linear Transform For Eris C1/ERIS-NIX_106_-FOLDED-Grid_Distortion(1)/Open_shift.py", line 9, in main
reader_affine(file_name,d)
File "/home/sebo/Documents/Linear Transform For Eris C1/ERIS- NIX_106_-FOLDED-Grid_Distortion(1)/Open_shift.py", line 35, in reader_affine
print(line[0][i][i])
IndexError: string index out of range
或
Enter file name: ERIS-NIX_106_-FOLDED-Grid_Distortion-cam2-wl3.txt
Traceback (most recent call last):
File "/home/sebo/Documents/Linear Transform For Eris C1/ERIS- NIX_106_-FOLDED-Grid_Distortion(1)/Open_shift.py", line 50, in <module>
main()
File "/home/sebo/Documents/Linear Transform For Eris C1/ERIS- NIX_106_-FOLDED-Grid_Distortion(1)/Open_shift.py", line 9, in main
reader_affine(file_name,d)
File "/home/sebo/Documents/Linear Transform For Eris C1/ERIS-NIX_106_-FOLDED-Grid_Distortion(1)/Open_shift.py", line 29, in reader_affine
line=np.fromstring(critical_line,dtype=float)
ValueError: string size must be a multiple of element size
或者我可以单独访问我的阵列,但我得到的结果是:
Enter file name: ERIS-NIX_106_-FOLDED-Grid_Distortion-cam2-wl3.txt
[
C
X
=
0
Y
=
3
对于这样的循环:
while i in range(0,line.size):
print(line[0][i])
i=i+1
答案 0 :(得分:0)
之前已经问过类似的问题(Python: Extract numbers from a string)。我从问题中复制了你的输入列表(字符串),除了删除双引号。
s=['Reference' 'Coordinates:' 'Xref' '=' '0.00000E+000,' 'Yref' '=''3.00947E-003\\r\\n']
然后你可以先提取删除非数字字符,这会创建一个数字列表作为字符串:
import re
x=array(re.findall(r"[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?", s[0]))
输出 ['0.00000E + 000''3.00947E-003']
将其转换为float数组:
import numpy as np
y = x.astype(np.float)
print y
输出: [0. 0.00300947]