3

次のようなデータファイルがあります

3 1.0 1.4 1.7
2 1.2 1.5
1 1.1
2 1.1 1.2

各行の最初の整数は、この行の浮動小数点数を示します。

今、すべてのデータを単一の matlab 配列にロードし、最初の列を無視したい、つまり、このような配列を取得したい

>>arr = [1.0, 1.4, 1.7, 1.2, 1.5, 1.1, 1.1, 1.2]

行ごとに同じ数の浮動小数点数がある場合、次のように簡単に実行できます

>>arr = load datafile ;
>>arr = arr(:,2:end) ; %ignore the first column
>>arr = arr(:) ; 

ただし、各行に異なる数の浮動小数点数がある場合、ファイルをマトリックスに直接ロードできないようです。これを達成する簡単な方法はありますか?

ありがとうございました。

4

2 に答える 2

4

まず、数値を文字列として読み取りましょう。

C = textread('myfile.txt', '%s', 'delimiter', '\n');

str2num結果は文字列のセル配列なので、各セルに適用して数値を取得しましょう。

C = cellfun(@str2num, C, 'Uniform', false);

それでは、各セルから最初の要素を破棄しましょう。

C = cellfun(@(x)x(2:end), C, 'Uniform', false);

最後に、すべての値を 1 つのベクトルに連結します。

arr = [C{:}]

これは完全なコードです:

C = textread('test.txt', '%s', 'delimiter', '\n'); %// Read data
C = cellfun(@str2num, C, 'Uniform', false);        %// Convert to numbers
C = cellfun(@(x)x(2:end), C, 'Uniform', false);    %// Remove first values
arr = [C{:}]

arr = 
    1.0000    1.4000    1.7000    1.2000    1.5000    1.1000    1.1000    1.2000
于 2013-01-04T14:28:41.307 に答える
1

これを行う簡単な方法は、ファイルを 1 行ずつ読み取ることです。

fid = fopen('data.txt');
arr = [];
tline = fgetl(fid);
while (tline ~= -1)
    temp = str2num(tline);
    arr = [arr temp(2:end)];
    tline = fgetl(fid);
end

loadcell関数を使用することもできますが、私は試していないので、うまくいくかどうかはわかりません。

于 2013-01-04T14:20:04.007 に答える