2013-05-13 84 views
-1

我有一个1x200结构的.mat文件(对应于200个实验会话)。在每个细胞中都有一个不同长度的矩阵(由600-800个1x1结构组成,对应于每个阶段的试验次数)。在每个结构(试验)中,都有单独的值,我希望单独存储。我应该怎么做呢?For循环从不同长度的结构中提取对象

ALLDATA < 1x200结构>(所有会话)

ALLDATA(1,1)< 1x1的结构>(1个会话)

ALLDATA(1,1).trial < 600-800x1结构>(在1个会话中的所有试验中,试验#是可变的)

ALLDATA(1,1).trial(1,1).value的(我想存储)

非常感谢什么!

+1

主要的1x200数据集是_cell_数组还是_structure_数组? “不同长度的结构”是什么意思?也是一个结构数组还是一个矩阵?请详细说明您的数据如何存储,并且如果可能,请使用MATLAB伪代码对其进行可视化。 – 2013-05-13 16:00:49

回答

0

我认为你正在寻找一个嵌套的循环:

OUTPUT = []; 

for I=1:size(allData,2) 
    for J=1:size(allData(1,I).trial,1) 
     OUTPUT(end+1) = allData(1,I).trial(J,1).value; 
    end 
end 

附加说明:
当使用size功能在Matlab for -loop语句,它检查(如果有必要的调试模式是非常重要的)选择了正确的尺寸。这就是为什么基于这里讨论的数据格式,它首先表示size(X,2),因为它是一个1x200结构,所以我们对第二维有兴趣;和size(Y,1)秒,因为它是一个600x1结构。
由于OUTPUT的整体维数可能难以先验确定,因此将其初始化为空向量。这对于(end+1)'计数器'起作用非常重要,如果该变量不知道什么时候该命令首先被调用,那么将会失败。之后,它将简单地附加valueOUTPUT

+0

非常感谢。不幸的是,我仍然得到了和以前一样的错误信息。 “在赋值A(I)= B中,B和I中的元素数量必须相同。” – user2171003 2013-05-13 16:38:18

+0

对于i = 1:numel(ALLDATA) nTrials {I} = numel(ALLDATA(1,i)的.trial) 端 对于i = 1:numel(ALLDATA) 对于j = 1:nTrials {i} values = allData(1,i).trial(j,1).value; 结束 结束 – user2171003 2013-05-13 16:59:23

+0

对于嵌套循环。当我做“值(结束+1)”我得到“???在赋值A(I)= B中,B和I中的元素数量必须相同。”当我做“价值”时,我得到一个空的向量。 – user2171003 2013-05-13 17:09:34