20

我想用来numpy.savetxt()将复数数组保存到文本文件中。问题:

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

看起来有人在 Numpy 邮件列表上多次询问过这个问题 甚至提交了一个错误,但没有得到回复。在我自己把东西放在一起之前,有没有一种规范的方法可以做到这一点?

4

2 回答 2

16

它更容易并保存一些临时数组以将数组重新解释为真正的数组。

保存:

numpy.savetxt('outfile.txt', array.view(float))

加载:

array = numpy.loadtxt('outfile.txt').view(complex)

如果您希望在文件的同一行中包含实部和虚部,可以使用

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

或者

array = numpy.loadtxt('outfile.txt').view(complex).reshape(-1)

分别。

(请注意,既不复制view()也不reshape()复制数组——它只会以不同的方式重新解释相同的数据。)

提问者的附录:

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

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()不对跨步数组进行操作。

于 2011-06-29T14:31:24.613 回答
6

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

保存:

numpy.savetxt('outfile.txt', numpy.column_stack([array.real, array.imag]))

加载:

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

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

于 2011-06-28T08:34:59.957 回答