为 Python 中的虚数导入带有 i 的文本文件

Importing a text file with i for imaginary numbers in Python

我有一个包含虚数的文本文件,我想将其导入 Python。文本文件是从 MATLAB 保存的,它使用 i 表示虚数,Python 使用 j 表示虚数。这会导致导入文件时出错。

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

这是文本文件中几行的示例:

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

一种快速而肮脏的方法是执行以下操作:

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)]

这里是一行的例子:

>>> 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)]

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

如果您打开 txt 文件并将 (e.g.CTRL+H on windows) all + symbols 替换为 [space] 并将所有 i 替换为 [space ] 你会得到类似的东西:

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