1

大学のプロジェクトの一環として、私は次のことをしなければなりません: 14 の異なるフォルダー (14 の異なる科目) を含むデータベースを使用し、すべてのフォルダーに .mat ファイルに保存された 12 の異なるアクティビティの 5 つの試行があります。試行ファイルには、6 つの列 (そのうち 3 つだけが必要) と異なるサイズの行が含まれています。ここで、被験者ごとに 5 つの試行を 1 つの .mat フォルダーに連結し、すべてのデータベースを次の形式で保存します: subject x activity x trial 。

私は次のコードを書きました:

InPath_data = 'C:\Users\olga\Desktop\USC-HAD\';

listname = [InPath_data, 'Subjects.txt'];
folder_subject = textread(listname,'%s','delimiter','\n','whitespace','');
listname = [InPath_data,'ActivityTrial.txt'];
files_act_tr = textread(listname,'%s','delimiter','\n','whitespace','');
fname = [InPath_data,folder_subject{1},'\',files_act_tr{1},'.mat'];
tmp1= [];
k=1;
for i=1:length(folder_subject)
    for j=1:length(files_act_tr)
        fname = [InPath_data,folder_subject{i},'\',files_act_tr{j},'.mat'];
        tmp= load(fname);
        q=tmp.sensor_readings( : ,(1:3));
        tmp1= cat(1,tmp1,q);
        clear q;
        if mod(j,5)==0
         data(j-4*k,:,:)=tmp1;
         k=k+1;
         tmp1=[];
        end
    end
end

tmp1 をクリアすると、ループを使用できなくなります。セル配列を使用することが私がやりたいことを行うための鍵であると思いますが、これまで使用したことがないので...助けていただければ幸いです! :)

4

2 に答える 2

1

編集:試行の安定した配列サイズを 10000x3 に設定することで、なんとかそれを行うことができました。そうしないと、サイズがループで変化し、4 D 行列が適切に形成されません。@Daniel R ソリューション tmp1=[] およびその他の変更を使用すると、コードは次のようになります。

InPath_data = 'C:\Users\olga\Desktop\USC-HAD\';

listname = [InPath_data, 'Subjects.txt'];
folder_subject = textread(listname,'%s','delimiter','\n','whitespace','');
listname = [InPath_data,'ActivityTrial.txt'];
files_act_tr = textread(listname,'%s','delimiter','\n','whitespace','');
fname = [InPath_data,folder_subject{1},'\',files_act_tr{1},'.mat'];
tmp1= [];
k=1;

for i=1:length(folder_subject)
    for j=1:length(files_act_tr)
        fname = [InPath_data,folder_subject{i},'\',files_act_tr{j},'.mat'];
        tmp= load(fname);
        q=tmp.sensor_readings( : ,(1:3));
        tmp1= cat(1,tmp1,q);
        clear q;

        if mod(j,5)==0

         data(i,j-4*k,:,:)= tmp1((1:10000), :);
         k=k+1;
         tmp1=[];

        end

    end
   k=1;
end
于 2013-10-20T10:26:47.403 に答える
1

clear tmp1;変数を削除すると、次の反復では、変数 tmp1 は以前に使用されたことがないため不明です。代わりに使用tmp1=[]すると、変数が空になります。これでコードが修正されます。

于 2013-10-19T13:59:48.217 に答える