2011-06-27 90 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 

我仍然會獎對號更好的解決方案!

相關問題