numpy.array
どうすればデータを適切に保存およびロードできるのか疑問に思います。現在はnumpy.savetxt()
メソッドを使用しています。たとえば、markers
次のような配列を取得した場合:
私は以下を使用してそれを保存しようとします:
numpy.savetxt('markers.txt', markers)
他のスクリプトでは、以前に保存したファイルを開こうとします:
markers = np.fromfile("markers.txt")
そして、それが私が得たものなのです...
保存されたデータは、最初は次のようになります。
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
しかし、同じ方法を使用してロードしたデータを保存すると、numpy.savetxt()
次のようになります。
1.398043286095131769e-76
1.398043286095288860e-76
1.396426376485745879e-76
1.398043286055061908e-76
1.398043286095288860e-76
1.182950697433698368e-76
1.398043275797188953e-76
1.398043286095288860e-76
1.210894289234927752e-99
1.398040649781712473e-76
何が間違っているのでしょうか? PS: 私が実行している他の「バックステージ」操作はありません。保存と読み込みだけ、そしてそれが私が得るものです。よろしくお願いします。
ベストアンサー1
私が見つけた最も信頼性の高い方法は、 ではなくnp.savetxt
を使用することです。これは、 で書き込まれたバイナリ ファイルに適しています。およびメソッドはバイナリ ファイルの書き込みと読み取りを行いますが、はテキスト ファイルに書き込みます。たとえば、次のようになります。np.loadtxt
np.fromfile
tofile
np.fromfile
np.tofile
np.savetxt
a = np.array([1, 2, 3, 4])
np.savetxt('test1.txt', a, fmt='%d')
b = np.loadtxt('test1.txt', dtype=int)
a == b
# array([ True, True, True, True], dtype=bool)
または:
a.tofile('test2.dat')
c = np.fromfile('test2.dat', dtype=int)
c == a
# array([ True, True, True, True], dtype=bool)
前者の方法は遅く、作成されるファイルも大きくなりますが (場合によっては)、私は前者の方法を使用します。バイナリ形式はプラットフォームに依存する場合があります (たとえば、ファイル形式はシステムのエンディアンによって異なります)。
そこにはプラットフォームに依存しないNumPy配列の形式で、 および を使用して保存および読み取ることができますnp.save
。np.load
np.save('test3.npy', a) # .npy extension is added if not given
d = np.load('test3.npy')
a == d
# array([ True, True, True, True], dtype=bool)