1

2D グリッドに値の大きなデータ ファイルがあります。これらは、グリッド内のデータの後続の行がファイル内の後続の行になるように編成されています。各列はタブ文字で区切られています。基本的に、これは CSV ファイルですが、列ではなくタブが含まれています。

データを転置し(最初の行が最初の列になる)、別のファイルに出力する必要があります。これを行う最善の方法は何ですか?どの言語でもかまいません (Perl または C/C++ を使用することを好みます)。現在、ファイル全体をメモリに読み込む Perl スクリプトがありますが、単純に巨大なファイルがあります。

4

2 に答える 2

2

最も簡単な方法は、入力に対して複数のパスを作成し、各パスで列のサブセットを抽出することです。列の数は、使用するメモリの量と入力ファイルの行数によって決まります。

例えば:

パス 1 では、入力ファイル全体を読み取り、最初の 10 列のみを処理します。入力が 100 万行の場合、出力は 100 万列と 10 行のファイルになります。次のパスでは、入力を再度読み取り、列 11 から 20 を処理して、結果を元の出力ファイルに追加します。等々....

于 2009-10-15T02:54:11.807 に答える
0

NumPy がインストールされた Python をお持ちの場合は、次のように簡単です。

#!/usr/bin/env python

import numpy, csv

with open('/path/to/data.csv', 'rb') as file:
    csvdata = csv.reader()

data = numpy.array(csvdata)
transpose = data.T

...csvモジュールは Python の標準ライブラリの一部です。

于 2012-12-22T20:56:23.303 に答える