2013-05-13 85 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