9

numpy.savetxt を使用して、4D numpy float 配列をプレーンテキスト ファイルに出力しようとしています。

ただし、この配列を渡そうとすると、float 引数が必要であるというエラーが numpy に表示されます。それにもかかわらず、numpy docは、渡される引数が配列のようであるべきだと指定しています...最大ランク2であるべきではありません.私がそれを機能させる唯一の方法は、データを2Dに再形成することです(これは実際にはそうではありませんデータ編成上の理由から常に実用的です)

これを回避する方法はありますか?それとも、必然的に numpy 配列を 2D に再形成する必要がありますか? 列ごとのスタイル (次元を処理する) のように、fortran でデータを読み取ることができると期待していました。

他の可能性はありますか?プレーンテキスト形式を必要とする別のプログラムとの互換性を求めるため、npy 形式を使用したくないことに注意してください。

4

2 に答える 2

5

ソースコードを見てみるとnumpy.savetxt

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

そのためnumpy.savetxt、1 次元配列または 2 次元配列でのみ機能します。

相互運用性のために、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]]]]
于 2012-11-21T15:23:21.927 に答える
3

別の方法として、配列を数値の単純なリスト (配列のフラット バージョン) として保存し、それに沿ってその形状に関する情報を保存する方法があります。

多次元配列の問題は、テキスト形式であっても、プログラムからプログラムへの移動がそれほど簡単ではないことです。

次のようなことができます:

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

ファイル名に含まれるサイズに関する情報を使用して、初期形状を復元します

于 2012-11-21T15:38:23.333 に答える