日々精進

新しく学んだことを書き留めていきます

ndarrayをテキストで保存する

JSONで保存したい場合は以下のようにEncoderを定義する必要がある。

class NumpyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, numpy.integer):
            return int(obj)
        elif isinstance(obj, numpy.floating):
            return float(obj)
        elif isinstance(obj, numpy.ndarray):
            return obj.tolist()
        else:
            return super(NumpyEncoder, self).default(obj)

json_dump = json.dumps({'a': a, 'aa': [2, (2, 3, 4), a], 'bb': [2]}, cls=NumpyEncoder)

csvで保存する場合は np.savetxt を使う。サンプルは以下。

np.savetxt("test.csv", array.flatten(), fmt="%.0f")

注意点は以下。 * 2次元までしか保存出来ないので次元数がそれ以上の場合はflattenする。 * フォーマットを指定しないと2.0000000e1のように桁数がすごく多くなるのでfmt="%.0f"のようにフォーマットを指定する。

参考:

deepage.net

stackoverflow.com