MATLABでnumpyで保存したcsvファイルを開く
結論
書きはじめの時は,numpyで保存したcsvがmatlabに変な感じで認識されるのを不満に思っていたのですが,途中から自分の過ちに気づきました.
要点は以下の2つです.
- csvread()は区切りがカンマでなくては行けない
- そうでない場合はreadtable()を使う
はい.帰ってよし.
numpy arrayの保存
自分はもっぱらsavetxt
を用います.
numpy.savetxt("K.csv", K, delimiter =',',fmt="%0.14f")
loadする時,そのままnumpy arrayとしてloadでき,他のソフトからも開きやすいからです.(Excelはダメ)
こんなデータになる
糞長くなるので人間にわかりやすいデータではないですが,一応こんな感じにsaveされます.
嘘です.delimiter =','
という引数を加えないと区切りがスペースになってしまいます.
其の結果が以下の通りです.
1.554141360341085672e+09 8.172370370370369983e+02 4.427456790123457040e+02 -1.855009145168301770e-03 -4.460917310385187178e-03 1.554141360408607960e+09 8.172024691358025166e+02 4.427777777777777715e+02 -1.670469061790032239e-03 -4.653048558273605202e-03 1.554141360473935604e+09 8.172383292383292428e+02 4.427518427518427302e+02 -1.816789199264026364e-03 -4.465982169869531920e-03 1.554141360534764767e+09 8.171901234567901611e+02 4.427753086419753004e+02 -1.689939994465252445e-03 -4.698456650358831185e-03
MATLABでcsvを開く
最も直感的なのはドラッグアンドドロップしてuiopenとして開くことです. 直感的だけど多くのcsvを読む用途には適しません.
csvread:’,’をdelimiterにしないとおかしくなる.
一応,csvread(filename)
とする手法がありますが,先ほどのcsvを読むと4行5列のarrayのはずなのに4行1列として表示されます.
ans = 1.0e+09 * 1.5541 0.0000 0.0000 -0.0000
カンマで区切ってないからですね.
readtable:有能
readtableなら区切り文字がほかの文字でもうまく検出することができます.
一方で返り値はtableなのでtable2array()
関数で変換する必要があります.
table2array(readtable(flename))
という感じです.
Reference
みんなもちゃんとリファレンス読みましょう.