2011-06-27 48 views
14

我想用numpy.savetxt()将复数数组保存到文本文件中。问题:如何使用numpy.savetxt保存和加载复数数组?

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

它看起来像有人询问这个multipletimes的numpy的邮件列表上,甚至提出了bug,但一直没有得到答复。在我把自己的东西放在一起之前,有没有一个规范的方法来做到这一点?

回答

11

这很简单,并保存一些临时数组,只是将数组重新解释为真实数组。

节能:

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()不在分步阵列上运行。

+0

非常好!短而优雅。 – ptomato

2

以下是我的解决方案,以防有人从Google中触及此问题。

节能:

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 

我仍然会奖对号更好的解决方案!

相关问题