3

大きなデータセット(> 30Gb)を既存のpytablesテーブルに追加しようとしています。テーブルはN列で、データセットはN-1列です。1つの列は、他のN-1列を知った後に計算されます。

numpy.fromfile()データベースに追加する前に、データセットのチャンクをメモリに読み込むために使用しています。理想的には、データをデータベースに貼り付けてから、最後の列を計算し、を使用Table.modifyColumn()して操作を完了します。

numpy.zeros((len(new_data), N))テーブルに追加してからTable.modifyColumns()、新しいデータを入力するために使用することを検討しましたが、追加する必要のあるチャンクごとに空のデータの巨大な配列を生成しないようにするための良い方法を誰かが知っていることを願っています。

4

2 に答える 2

2

結果を別のテーブルに追加できます。計算された列が他の列に隣接するというやむを得ない理由がない限り、おそらくそれが最も簡単です。とにかく計算から生データを分離するために言われることがあります。

テーブルのサイズを大きくする必要がある場合は、h5pyの使用を検討してください。これは、h5ファイルへのより直接的なインターフェースを提供します。h5ファイルでのデータセットの作成方法によっては、データに列を追加するだけでは不十分な場合があることに注意してください。一般的なデータ形式に関する説明については、http: //www.hdfgroup.org/HDF5/doc/UG/03_DataModel.htmlのセクション1.2.4「データスペース」を参照してください。基になるデータセットがサイズ変更をサポートしている場合、 h5pyはサイズ変更をサポートします。

次のように、単一のバッファを使用して入力データを格納することもできます。

z = zeros((nrows, N))
while more_data_in_file:
    # Read a data block
    z[:,:N-1] = fromfile('your_params')
    # Set the final column
    z[:,N-1:N] = f(z[:,:N-1])
    # Append the data
    tables_handle.append(z)
于 2011-09-07T01:49:46.293 に答える