使用i导入文本文件,用于Python中的虚数

时间:2017-07-03 14:16:36

标签: python complex-numbers

我有一个带有虚数的文本文件,我希望将其导入到Python中。文本文件是从MATLAB中保存的,它使用i作为虚数,Python使用j作为虚数。这导致导入文件时出错。

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

以下是文本文件中几行的示例:

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

3 个答案:

答案 0 :(得分: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)]

答案 1 :(得分: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)]

答案 2 :(得分:-1)

可能的解决方案如下,但您需要首先预处理.txt文件。

如果你打开txt文件并替换(例如Windows上的CTRL + H)所有+符号只有[空格]而所有我用[空格]你会有类似的东西:

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数组而不是列表!