多数のNumPy配列をファイル(np.save
()、 ".npy"ファイル)として保存したとしましょう。すべてこれらは形状を有する。 (n,20)、私はファイルを開かずにnを知らない。 nはすべてのファイルで異なります。Python - 形状が未知で、メモリに収まらない多数の大きなnumpy配列をマージします。
これらを1つのデータセットにマージし、一連の選択方法を使用して、ディスクに書き込まれた3つの異なるnumpy配列に分割します。
通常、私はすべてのファイルをループし、np.concatenate()
を使用します。しかし、最終的な配列はメモリに収まらない可能性があります。
他のオプションはnp.memmap()
を使用することです。これはどういう仕組みであるかは絶対に分かりません。私の理解するために、私はそのような何かをする必要があると思います:
a = np.memmap('output.npy',dtype='float64',mode='w+',shape=(N,20))
for i,f in enumerate(myfiles):
a[i,:] = np.load(f)
a.flush()
# And then find a way to split "a" into three, does the following work?
part_one = a[ [0,2,10,42,58] , : ]
問題は、私はN、行の最後の番号がわからないということです。したがって、私はmemmapを宣言する前に、各ファイルを開いて、行数を読み込み、ファイルを閉じて、行数を合計する必要があります。これは非常に非効率的であり、より良い方法が必要です。
この問題に関するご意見はありますか?私は何か間違っているのですか?
「行数を読み取る」とは、ヘッダーまたは配列全体を読み取っているだけですか?ちょうどそのヘッダー、それは私にとって妥当と思われる。 – tdelaney
'array.shape()'を使っていますが、これは "header"でしょうか? – Milleuros
... 'np.load'の後に? – tdelaney