为 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 数组而不是列表!
我有一个包含虚数的文本文件,我想将其导入 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 数组而不是列表!