私は次の形式の数値データを含むnumpy配列を持っています:
example = numpy.array([[[i for i in range(0, 5)],[0 for j in range(0, 5)]] for k in range(0, 10)])
したがって、これは10個のグループの配列であり、各グループは同じ長さの2つのリストで構成され、数値のみを含みます。次の保存コードを実行すると、以下のエラーが発生します。
numpy.savetxt('exampleData.csv', test, delimiter=',')
TypeError: Mismatch between array dtype ('int32') and format specifier ('%.18e %.18e')
これはfmt = 'xyz'引数の何かで修正できると思いますが、ドキュメントは特に明確ではありません。任意の助けいただければ幸いです。
(私の実際のデータでは、iリストとjリストは長い浮動小数点数のリストです(例: '0.0047322940571'など)。)
example
は3次元配列です
In [82]: example=np.array([[[i for i in range(0, 5)],[0 for j in range(0, 5)]] for k in range(0, 3)]) # chg 10 to 3 for display
In [83]: example.shape
Out[83]: (3L, 2L, 5L)
In [84]: example
Out[84]:
array([[[0, 1, 2, 3, 4],
[0, 0, 0, 0, 0]],
[[0, 1, 2, 3, 4],
[0, 0, 0, 0, 0]],
[[0, 1, 2, 3, 4],
[0, 0, 0, 0, 0]]])
すべてを保存しようとすると、エラーが発生します(バージョンが異なるためメッセージが異なります)。
In [87]: np.savetxt('test.csv',example, delimiter=',')
....
TypeError: float argument required, not numpy.ndarray
しかし、1つの「行」を保存しても問題ありません
In [88]: np.savetxt('test.csv',example[1,...], delimiter=',')
整数形式で保存すると、きれいな出力になります
In [94]: np.savetxt('test.csv',example[1,...], delimiter=',',fmt='%d')
In [95]: with open('test.csv') as f:print f.read()
0,1,2,3,4
0,0,0,0,0
では、3D配列をどのように保存しますか?あなたがそれをどのように使用/読むかを覚えておいてください。複数のファイル? 1つのファイル内に複数のブロック?
https://stackoverflow.com/a/3685339/901925 は6歳ですSO 3D配列を保存する方法の答えです。簡単な答えは、ファイル、および配列のスライスに対して複数のsavetxt
を実行します。これにより、データがブロックに保存されます。ただし、これらのブロックのロードは、別のSO質問です(以前に出てきました)。
In [100]: with open('test.csv','w') as f:
...: for row in example:
...: np.savetxt(f,row,delimiter=',',fmt='%d',footer='====')
...:
In [101]: with open('test.csv') as f:print f.read()
0,1,2,3,4
0,0,0,0,0
# ====
0,1,2,3,4
0,0,0,0,0
# ====
0,1,2,3,4
0,0,0,0,0
# ====
あなたのコメントに応じて、これは機能します
example=np.ones((4,2,100))
np.savetxt('test.csv',example[1,...], delimiter=',',fmt='%.18e')
3D配列を保存する別の方法は、2Dに変形することです。おそらくコメント行に保存した情報を使用して、ロード後に3Dに再形成します
np.savetxt('test.csv',example.reshape(-1,example.shape[-1]), delimiter=',',fmt='%.18e')
import numpy
example = numpy.array([[[i for i in range(0, 5)],[0 for j in range(0, 5)]] for k in range(0, 10)])
f = open('exampleData.csv', 'ab')
for i in example:
numpy.savetxt(f, i, fmt='%i')