gpt4 book ai didi

python - 将复杂数据读入 numpy 数组

转载 作者:行者123 更新时间:2023-11-28 20:44:56 24 4
gpt4 key购买 nike

我需要将文本文件中的复数读入 numpy 数组。我的问题类似于这个 Writing and reading complex numbers using numpy.savetxt and numpy.loadtxt 但是,这里的解决方案是更改数据保存的格式。我没有这种奢侈,因为文本文件是由其他我无法更改的软件生成的。文本文件的示例如下:

25 + 0i
8.43818 + -4.94194i
4.46817 + -5.08305i
4.55764 + -3.02201i
2.69138 + -5.43104i
-0.151334 + -4.83717i
1.98336 + -1.3339i
3.59002 + -0.932973i
1.42727 + -0.617317i
1.02005 + -1.14214i
-0.15564 + 2.74564i

我尝试了以下方法:

np.loadtxt('file.txt',delimiter='\n',dtype=np.complex128)

但是我得到了错误:

ValueError: complex() arg is a malformed string

我读过的帖子表明这是某些行中 + - 符号的问题,但是,即使额外的 + 符号是已删除。

最佳答案

however, the solution here is to alter the format the data is saved in

好消息,您不必这样做!

numpy.loadtxt 可以接受任何可迭代的行,而不仅仅是一个文件对象。

因此,您可以将文件对象包装在一个简单的生成器中,该生成器可以动态转换行,并将其提供给 loadtxt,每个人都会很高兴。

像这样:

def transform_complex(line):
# insert your code here

with open('file.txt', 'rb') as f:
lines = map(transform_complex, f)
arr = np.loadtxt(lines, dtype=np.complex128)

(如果您使用的是 Python 2.x,并且文件很大,您可能希望使用 itertools.imap 而不是 map。)

“在此处插入您的代码”部分,您根据有效的答案填写,但不是可接受的解决方案,因为它需要修改文件。由于我在您的链接中没有看到这样的答案,所以我不确定那是什么,但是例如,也许是这样的:

def transform_complex(line):
return line.replace(b'+ -', b'- ')

在本地进行测试,看起来您的输入实际上存在三处错误。

您可以使用 savetxt 测试输出应该的样子。例如:

>>> arr = np.array([1-2j])
>>> f = io.BytesIO()
>>> np.savetxt(f, arr)
>>> f.getvalue()
b' (1.000000000000000000e+00-2.000000000000000000e+00j)\n'

(在 Python 2.x 中,您不会看到 b 前缀。)

并非所有这些差异都被证明是相关的——你不必使用指数表示法,你不需要括号等等——但这三个差异看起来是:

  • 复数中 + 两边不允许有空格。
  • 虚数单位必须是j,而不是i
  • 不允许 +-

所以:

def transform_complex(line):
return line.replace(b' ', b'').replace(b'+-', b'-').replace(b'i', b'j')

关于python - 将复杂数据读入 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25022899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com