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

誰かが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

私はまだより良い解決策にチェックマークを与えます!

于 2011-06-28T08:34:59.957 に答える