リストに格納されている配列がnumpyです。これらの配列には個々の名前はなく、リストのインデックスで呼び出すだけです。numpy.loadは、savez'ed配列を間違った順序で取得します。
これらをすべてまとめて保存する必要があるため、numpy.savez
を使用して1つのファイルに保存しました。私の配列は名前が付けられていないので、リストを列挙したところでnumpy.savez
に自動名 "arr_0"、 "arr_1"などが割り当てられました。
しかし、すべて私がnumpy.load
を使ってそれらを検索しようとしたとき、私はnumpy.load
が一見ランダムな順序で配列をリストすることを発見しました。もちろん、配列をリストアする前にこのリストを並べ替えることはできますが、無名配列の順序付きリストを格納して取得するための簡単な方法はないというのが非常に奇妙です。ここで
事を実証するテストコードの一部です:
import numpy as np
arr_list = []
for i in range(15):
arr_list.append(np.array(range(i, i+6)).reshape(2, 3))
np.savez('testfile', *arr_list)
with np.load('testfile.npz') as data:
print(data.files)
そして、ここでは、私が得るものです:
>>> ['arr_1', 'arr_3', 'arr_13', 'arr_11', 'arr_14', 'arr_10', 'arr_8', 'arr_0',
'arr_2', 'arr_9', 'arr_5', 'arr_4', 'arr_6', 'arr_12', 'arr_7']
多くはである何、私は二度同じ結果を得ることはありません。次の試み:結果は、私は必要なものではない(と私は、リスト内の10の以上の項目で例を挙げた理由です)として
>>> ['arr_6', 'arr_11', 'arr_10', 'arr_13', 'arr_0', 'arr_7', 'arr_5', 'arr_3',
'arr_14', 'arr_2', 'arr_8', 'arr_12', 'arr_1', 'arr_9', 'arr_4']
残念ながら私は、sorted()
を使用してリストを並べ替えることができません。
>>> ['arr_0', 'arr_1', 'arr_10', 'arr_11', 'arr_12', 'arr_13', 'arr_14', 'arr_2',
'arr_3', 'arr_4', 'arr_5', 'arr_6', 'arr_7', 'arr_8', 'arr_9']
なぜnumpy.savez
+ numpy.load
がこのような奇妙な動作をするのかわかりません。私は何かを逃したのか、これを整理するために正規表現を使う必要がありますか?
を再作成するか、 'data'は'経由で個々のアレイへのアクセスを許可するオブジェクトのような辞書は、ありますデータ['arr_0'] '。辞書のキーは順不同です。 – hpaulj
@hpaulj: 'data'は辞書のようなものですが、' data.files'はそうではありません。 – pafcu
意図的に、 'savez'文書の例では、変数名がシャッフルされています。その目的は配列がリスト順ではなく名前で返されることです。 – hpaulj