Matlab使用循环创建单元阵列

时间:2013-10-19 13:41:01

标签: arrays matlab multidimensional-array

作为大学项目的一部分,我必须做以下事情: 使用包含14个不同文件夹(14个不同主题)的数据库,在每个文件夹中,我们对.mat文件中存储的12个不​​同活动进行5次试验。 试验文件包含6列(我只想要3列)和不同大小的行。现在我想在每个主题的一个.mat文件夹中连接5个试验,并将所有数据库存储为以下格式: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时我无法使用循环。我怀疑使用单元阵列是关键 做我想做的事,但我以前从未使用过它们,所以... 任何帮助,将不胜感激! :)

2 个答案:

答案 0 :(得分:1)

clear tmp1;删除变量,在下一次迭代中,变量tmp1未知,就像以前从未使用过一样。使用tmp1=[]代替清空变量。这应该可以修复你的代码。

答案 1 :(得分: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