Python 如何使用numpy.savetxt保存和加载复数数组?

Python 如何使用numpy.savetxt保存和加载复数数组?,python,numpy,complex-numbers,Python,Numpy,Complex Numbers,我想使用将复数数组保存到文本文件中。问题: 如果使用默认格式字符串保存复数数组,则会丢弃虚部 如果使用fmt='%s',则除非指定dtype=complex,转换器={0:lambda s:complex},否则numpy.loadtxt()无法加载它。即使如此,如果阵列中存在NaN,加载仍然失败 看起来有人在Numpy邮件列表上询问过这件事,甚至提交了一份申请,但没有得到回复。在我自己整理一些东西之前,有没有一种规范的方法可以做到这一点呢?这是我的解决方案,以防有人从谷歌找到这个问题 保存

我想使用将复数数组保存到文本文件中。问题:

  • 如果使用默认格式字符串保存复数数组,则会丢弃虚部
  • 如果使用
    fmt='%s'
    ,则除非指定
    dtype=complex,转换器={0:lambda s:complex}
    ,否则
    numpy.loadtxt()
    无法加载它。即使如此,如果阵列中存在NaN,加载仍然失败

看起来有人在Numpy邮件列表上询问过这件事,甚至提交了一份申请,但没有得到回复。在我自己整理一些东西之前,有没有一种规范的方法可以做到这一点呢?

这是我的解决方案,以防有人从谷歌找到这个问题

保存:

numpy.savetxt('outfile.txt', numpy.column_stack([array.real, array.imag]))
numpy.savetxt('outfile.txt', array.view(float))
装载:

array_real, array_imag = numpy.loadtxt('outfile.txt', unpack=True)
array = array_real + 1j * array_imag
array = numpy.loadtxt('outfile.txt').view(complex)

我仍然会将复选标记授予更好的解决方案

这样做更简单,只需保存一些临时数组即可将数组重新解释为真实数组

保存:

numpy.savetxt('outfile.txt', numpy.column_stack([array.real, array.imag]))
numpy.savetxt('outfile.txt', array.view(float))
装载:

array_real, array_imag = numpy.loadtxt('outfile.txt', unpack=True)
array = array_real + 1j * array_imag
array = numpy.loadtxt('outfile.txt').view(complex)
如果您希望文件中的实部和虚部位于同一行,可以使用

numpy.savetxt('outfile.txt', array.view(float).reshape(-1, 2))

分别

(请注意,无论是
view()
还是
reformate()
都不会复制数组——它只会以不同的方式重新解释相同的数据。)

提问者的附录:

如果要在同一文件中保存多个复杂数组,可以这样做:

numpy.savetxt('outfile.txt', numpy.column_stack([
    array1.view(float).reshape(-1, 2),
    array2.view(float).reshape(-1, 2),
]))

array1, array2 = numpy.loadtxt('outfile.txt', unpack=True).view(complex)

重塑是必要的,因为
numpy.view()
不能在跨步阵列上运行。

太棒了!短小而优雅。