首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab使用循环创建单元格数组

Matlab使用循环创建单元格数组
EN

Stack Overflow用户
提问于 2013-10-19 13:41:00
回答 2查看 1.3K关注 0票数 1

作为大学项目的一部分,我必须做以下工作:使用包含14个不同文件夹(14个不同主题)的数据库,在每个文件夹中,我们在.mat文件中存储了12个不同活动的5次试用。试验文件包含6列(我只想要3列)和不同的行大小。现在,我想将每个主题的5个测试连接在一个.mat文件夹中,并将所有数据库存储为以下格式: subject x activity试用版。

我编写了以下代码:

代码语言:javascript
复制
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时,我不能使用循环。我怀疑使用单元数组是做我想做的事情的关键,但我以前从未使用过它们,所以.如有任何帮助,将不胜感激!)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-19 13:59:48

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

票数 1
EN

Stack Overflow用户

发布于 2013-10-20 10:26:47

编辑:我成功地做到了,通过将一个稳定的数组大小设置为10000x3,否则,大小在循环上发生变化,而4D矩阵不能正确地形成。使用@Daniel解决方案tmp1=[]和其他一些修改,代码如下:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19466643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档