1. ホーム
  2. python

[解決済み] Python : numpy.saveで辞書を保存する [重複].

2022-02-14 22:10:43

質問

大きなデータセット(数百万行)がメモリ上にあり、それを numpy 配列 ディクショナリ .

このデータを構築したら、ファイルに保存しておきたい。 そうすれば、後でこのデータをもう一度ゼロから再構築することなく、これらのファイルを素早くメモリにロードすることができます。

np.save そして np.load 関数は、numpyの配列に対してスムーズに仕事をします。
しかし、私はdictオブジェクトで問題に直面しています。

d2はファイルから読み込んだ辞書です。 out[28]参照 d2にはdictではなくnumpyの配列として読み込まれています。 そのため、getなどの更なるdict操作が効かない。

ファイルから(numpy配列ではなく)dictとしてデータを読み込む方法はありますか?

In [25]: d1={'key1':[5,10], 'key2':[50,100]}

In [26]: np.save("d1.npy", d1)

In [27]: d2=np.load("d1.npy")

In [28]: d2
Out[28]: array({'key2': [50, 100], 'key1': [5, 10]}, dtype=object)

In [30]: d1.get('key1')  #original dict before saving into file
Out[30]: [5, 10]

In [31]: d2.get('key2')  #dictionary loaded from the file
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-31-23e02e45bf22> in <module>()
----> 1 d2.get('key2')

AttributeError: 'numpy.ndarray' object has no attribute 'get'

解決方法は?

構造化された配列です。使用方法 d2.item() を使って実際のdictオブジェクトを先に取得します。

import numpy as np

d1={'key1':[5,10], 'key2':[50,100]}
np.save("d1.npy", d1)
d2=np.load("d1.npy")
print d1.get('key1')
print d2.item().get('key2')

の結果です。

[5, 10]
[50, 100]