2012-11-21 2 views
9

numpy.savetxtを使用して4D numpy浮動小数点配列をプレーンテキストファイルに出力しようとしていますnumpy.savetxtをN> 2のN次元のndarrayで使用できますか?

numpyは、この配列を渡そうとするとfloat引数が必要であるというエラーが返されます。それにもかかわらず、numpyのドキュメントでは、渡される引数は配列のように指定する必要があります。最大ランク2でなければなりません。私が動作させる唯一の方法は、データを2Dに再形成することです

この方法はありますか?または、numpy配列を2Dに変更する必要がありますか? 私はFortran形式のデータを列単位で読み込むことができるようになることを期待していました。

他の可能性はありますか?私が平文フォーマットを必要とする別のプログラムとの互換性を追求するので、私はnpyフォーマットを使いたくないことに注意してください。

答えて

3

異なるアプローチをとして配列を保存することです単純な数値のリスト(配列のフラットバージョン)を作成し、その形状に関する情報を保存します。

多次元配列の問題は、テキスト形式でもプログラム間で移動するのはそれほど簡単ではないということです。

あなたはこのような何か行うことができます。

myarray = rand(5,5,5) 
name = 'myarray'+myarray.shape+'.txt' 
np.savetxt(name,myarray.flatten()) 

かつエレガントな、初期形状

5

あなたはnumpy.savetxtのソースコードを見ると、あなたがそうnumpy.savetxtのみ1または2次元配列のために動作します

for row in X: 
     fh.write(asbytes(format % tuple(row) + newline)) 

を見つけることができます。相互運用性のために

あなたがリストにnumpyの配列に変換するための十分なメモリがあれば、あなたはJSONを使用することができます。

import json 
import numpy as np 
a = np.arange(24).reshape(-1, 2, 3, 4).astype('float') 
a[0,0,0,0] = np.nan 
with open('/tmp/out', 'w') as f: 
    json.dump(a.tolist(), f, allow_nan = True) 

利回り

[[[[NaN, 1.0, 2.0, 3.0], [4.0, 5.0, 6.0, 7.0], [8.0, 9.0, 10.0, 11.0]], [[12.0, 13.0, 14.0, 15.0], [16.0, 17.0, 18.0, 19.0], [20.0, 21.0, 22.0, 23.0]]]] 
+0

THXを復元するために、ファイル名にincluedのサイズに関する情報を使用します。私の目的のために使用することはできません。しかしそれは私にjsonを発見させました。そのためのThx。いずれにしても、私と通信する必要があるアプリケーションは、常に2Dデータを必要とします(私が知ったように)。だから私はそれがちょうどnumpyの配列を "インテリジェントに"再形成するのは私によると思います –

関連する問題