0

MATLABに読み込みたい.csvファイルがたくさんありますが、途中で整理を行っています

私の最初の問題は、私のデータが次のようになっていることです。

[...

file1  
ex1  
6;0  
8;0  
9;1  
file1  
ex2  
7;0  
8;1  
3;2  
file1  
ex3  
7;0  
8;1  
3;2  

何らかの理由でMATLABのインポートウィザードは、最初のヘッダーテキストとその下のデータセットのみを取得し、次のテキストヘッダーに到達するとすべてを破棄します。では、代わりにこのように見えるようにファイルを整理するにはどうすればよいですか?

[...

file1......file1.....file1  
ex1.......ex2.......ex3  
6;0.......7;0.......7;0  
8;0.......8;1.......8;1  
9;1.......3;2.......3;2  

注:異なるexの行数は常に異なるため、ファイルを通常のチャンクにスピルすることはできません。

次に、私の2番目の問題は、異なるファイルからの同じ実験を比較することです。したがって、すべての異なるファイルから「ex1」の下の列を取得し、新しいマトリックスで互いに水平に並べます。次のようになります。

file1.....file2.....file3.....    
ex1.......ex1.......ex1.......    
6;0.......6;0.......6;0.......  
8;0.......8;0.......8;0.......  
9;1.......9;1.......9;1....... 

注:異なるファイルの元は異なる順序になっています。ヘッダーの行の1つとの一致に基づいて、ファイル内のexを一致させる必要があります(たとえば、「track1」と呼ばれる場合は常に)。


編集:

これが実際のデータの様子です。

4

2 に答える 2

1

これが問題の完全な解決策ではないことは認識していますが、テキスト編集 (および MATLAB で解析するときに発生する恐ろしい速度の低下) を克服するためによく使用する別の解決策は、MATLAB コネクタを介して Java または C# にデータを読み込むことです。 .

MATLAB から C# と Java を呼び出すのはかなり簡単で、私はテキスト関連の作業の多くを行っています。

于 2011-07-22T01:54:06.007 に答える
1

各 ex の行数が異なるため、セル マトリックスを使用する必要があります。

file = 'file1.csv';
h = 2; % # header lines
num_ex = 3;
r = h; % track the current row in the file
data = cell(1,num_ex);
for i=1:num_ex
    s = importdata(file, ';', r);
    x = s.data;
    data{i} = x;
    r = r + size(x,1) + h;
end

次に、中かっこのセル行列表記を使用してデータにアクセスできます

ex = 2;
x = data{ex};

だからあなたは得る

x = [ 7  0
      8  1
      3  2 ]

2番目の問題については、各ファイルを通過するループを追加できます

filenames = {'file1.csv', 'file2.csv', 'file3.csv'};
h = 2; % # header lines
num_ex = 3;
r = h; % track the current row in the file
data = cell(1,num_ex);
for i=1:num_ex
    for f=1:length(filenames)
        file = filenames{f};
        s = importdata(file, ';', r);
        x = s.data;
        data{i} = [data{i} x];
    end
    r = r + size(x,1) + h;
end

つまり、data{1}ex 1 などのすべてのデータが含まれています。

于 2011-07-21T18:15:07.983 に答える