アクサンの場合

Python3初心者が段々上達するログ

numpy savetxtで複素数も扱うとき

savetxtを複素数でも扱う

普通savetxtは実数だけで扱っているので複素数のことなど気にも留めない。 そのまま複素数もいけるのかと思いきや、そうは問屋は卸さない。

問題

複素数を含む数をarrayに入れたまま保存すると、(1.00000000e + 1,0000000ej)なんて形になってしまう。この括弧が厄介でこれのせいでpandasでも呼び出せはするがアクセスができないなんてことになる。

解決

numpy savetxt complexとググれば答えは見つかりはする。

python - Writing and reading complex numbers using numpy.savetxt and numpy.loadtxt - Stack Overflow

ここでは

numpy.savetxt(save, array.reshape(1, array.shape[0]), newline = "\r\n", fmt = '%.4f%+.4fj '*4)

こうやるといい、と書いてある。しかしこのまま保存するとcsvにならず連続で4つの実数と虚数の組が並んでしまう。delimiterをホワイトスペースかカンマにするだけなのだが、お好きな方で。 カンマにするときは、

numpy.savetxt(savefilename, array, fmt = '%.4f%+.4fj, '*4, delimiter=',')

とすると綺麗にCSVになってくれる。 *4は、要するに列数だ。100列あるなら*100になるというわけ。また肝はfmt = '%.4f%+.4fj, '*4,でfmtの中にカンマを指定すれば思い通りに出力してくれる。

こんな感じでいじることができるので、任意の出力に対応することができる、らしい。複素数は今回のように出力するのが良いのではないだろうか。