2017-07-03 60 views
1

我有一個帶有想象數字的文本文件,使用我想導入到Python中。文本文件是從MATLAB保存的,它使用i代表虛數,Python使用j代表虛數。這導致導入文件時出錯。用i在Python中導入一個虛數的文本文件

a = np.loadtxt('a.txt') 

這裏是在文本文件中的幾行的例子:

282814803.000000 + 0.00000000000000i 
-16531486.2042027 + 10391991.8573661i 
6013078.93662147 - 7538432.00418058i 
+0

這是一個常見的問題(在Python中複雜)。你想加載a.txt到Python列表或numpy數組。我發佈了「numpy array case」 – sera

回答

1

一,快速和骯髒的方法是做到以下幾點:

values = list() 
with open('a.txt') as h: 
    for line in h: 
     values.append(eval(line.replace('i', 'j'))) 

# OUTPUT 
# print values 
# [(282814803+0j), (-16531486.2042027+10391991.8573661j), (6013078.93662147-7538432.00418058j)] 
0

這裏的例子對於一條線:

>>> line="282814803.000000 + 163486.00000000000000i" 
>>> line=line.replace('i', 'j') 
>>> line=line.replace(' ', '') 
>>> complex(line) 
(282814803+163486j) 

然後你可以這樣做:

list=[] 
with open('data.txt') as data: 
    for line in data: 
     line=line.replace('i', 'j') 
     line=lim]ne.replace(' ', '') 
     list.append(complex(line)) 

,會給你:

>>>list 
[(282814803+163486.00468j), (-16531486.2042027+10391991.8573661j), (6013078.93662147-7538432.00418058j)] 
-1

一個可能的解決方案是下面的,但你需要預處理的.txt文件第一。

如果打開txt文件,並只用[空格]將其替換(egCTRL + H在Windows上)所有+符號和所有我[空格]你會碰到這樣的:

282814803.0 0.00

-16531486.2 10391991.85

6013078.9 7538432.00

然後你可以使用:

import numpy 
a = np.loadtxt('a.txt').view(complex) 
print(a) 

結果是:

>>> a 
array([[ 2.82814803e+08  +0.j  ], 
     [ 1.65314862e+07+10391991.8573661j ], 
     [ 6.01307894e+06 +7538432.00418058j]]) 

也許這是不是最好的方式,但它工作得很好,它給你一個numpy的數組不是列表!

相關問題