3

配列とのresize()関数の影響を理解したい。私のアプリケーションでは、テキストファイルを1行ずつ読み取り、データを解析した後、ファイルに書き込みます。これを実装するための良いアプローチは何でしょうか。新しい各行を配列に追加し、numpy配列のサイズを変更し続ける(最終的には完全なnumpy配列をh5pyデータセットに書き込む)必要がありますか、それとも新しい各行データを直接追加してメモリ内のサイズを変更する必要があります。各行の後でサイズ変更を続けると、関数はパフォーマンスにどのように影響しますか?または、100行または1000行ごとにサイズを変更する必要がありますか?numpyh5py datasethdf5numpyh5py dataseth5py datasetresize()

各データセットには約200,000行が含まれる可能性があります。

どんな助けでも大歓迎です。

4

2 に答える 2

2

resize()は配列内のすべてのデータをコピーすると思いますが、繰り返し呼び出すと遅くなります。

配列にデータを継続的に追加する場合は、最初に大きな配列を作成し、インデックスを使用してデータを配列にコピーできます。

または、配列モジュールの配列オブジェクトを使用できます。これは、リストのように動作する動的配列です。すべてのデータを配列オブジェクトに追加した後、それをndarrayに変換できます。次に例を示します。

import array
import numpy as np
a = array.array("d")
a.extend([0,1,2])
a.extend([3,4,5])
b = np.frombuffer(a, np.float).reshape(-1, 3)
于 2012-08-16T01:43:50.543 に答える
1

NumPy配列は、サイズを変更するようには設計されていません。これは実行可能ですが、メモリの観点からは無駄です(最初の配列よりも大きい2番目の配列を作成してから、データで埋める必要があるためです。これは、保持する必要のある2つの配列です)。もちろん、時間の観点からも無駄です。一時配列)。リスト(または@HYRYで提案されている通常の配列)から始めて、十分な大きさのチャンクがある場合はndarraysに変換することをお勧めします。問題は、いつ変換を行う必要があるかということです。

于 2012-08-17T01:26:12.910 に答える