0

1000 行と 100000 列を含む .txt ファイルがあります。分析する必要があるシミュレーション結果 (実数) の 10 GB のテキスト ファイル。

私のデータは次の形式です:( [0.5 0.3 0.45 .. ; 0.4 0.22 0.21587 .. ; 0.1359 1.054 1.1 ... ]
スペースと行で区切られています)

を使用して(Matlabで)ファイル全体を一度にマトリックスにロードしようとするとA=load('Data.txt')、「メモリが不足しています」というエラーメッセージが表示されます。これは、RAM(右?)を意味すると思います。

ファイルから一度に 1 行だけを 1 次元配列に読み込みたいと考えています。それ、どうやったら出来るの?すでにさまざまなバージョンのA=load('Data.txt')(1,:)orA=load('Data.txt'(1,:))などを試しました。

Cコードコードでの回答もいただければ幸いです。ありがとうございました。

4

3 に答える 3

1

この回答を参照してください。ファイルがそれほど大きい場合は、一度にすべてをロードしようとしないでください。行ごとに読む必要があります。それでもうまくいかない場合は、csvread関数を調べてください。

編集:また、このリンクは非常に役立つ可能性があります

2 番目の編集: Matfile ioを試す

于 2013-06-18T18:13:46.573 に答える
0

これはあなたが探していることをするはずです:

fid = fopen('Data.txt');
while~feof(fid)
    line = fgetl(fid);
    C = textscan(line, '%f %f %f', 'Delimiter', ';');
    data = cell2mat(C);
    ... Do you processing below
end

これにより、データが 1 行ずつ処理されます。また、データは char で区切られており;、各行の長さを知っているため ( %f %f %f) であると想定しています。たとえば、次のようになります。

0.5 0.3 0.45; 0.4 0.22 0.21587; 0.1359 1.054 1.1

これに変わります:

0.5000    0.3000    0.4500
0.4000    0.2200    0.2159
0.1359    1.0540    1.1000

目標は同じです。データから一度に各行を読み取り、その合計を計算します。– user1611107

各行の合計を探している場合は、次を追加できます。

lSum = sum(data);
于 2013-06-18T20:29:01.783 に答える
0

効率がそれほど重要でない場合は、eval ステートメントを使用できます。

fid = fopen('output.txt');  % Open the file
numRun = 10; % The number of simulations
for ii = 1:numRun
    ln = fgetl(fid);
    eval( sprintf('a=%s;', ln) );

    % Do stuff
end

ただし、実行ごとに独自の特別なファイルを与えてから、通常どおりに読み取る方がよいと思います。そうすれば、eval ステートメントからのゴースト変数や全体的な eval オーバーヘッドについて心配する必要がなくなります。

fid = fopen('output.txt');  % Open the file
numRun = 10; % The number of simulations

for ii = 1:numRun
    ofid = fopen(sprintf('output%i.txt', ii), 'w')
    ln = fgetl(fid); % Read the line
    fprintf( ofid, ln );
    fclose( fid );
end
于 2013-06-18T18:16:54.100 に答える