2012-12-06 112 views
1

我無法將matlab數組轉換爲單元值數組。將Matlab數組轉換爲單元陣列

stacksize = size(resultStack.('f'),1); % 2897 values 
exportc = cell(stacksize+1, 4); 

exportc{1,1} = 'top'; 
exportc{1,2} = 'bottom'; 
exportc{1,3} = 'left'; 
exportc{1,4} = 'right'; 

exportc{2:end,:} = mat2cell(resultStack.('f'), 1:stacksize, 1:4); 

這結束與錯誤

輸入參數,D1至D2,和必須爲輸入矩陣的大小的每個維度,[2897 4]。

我在做什麼錯?

回答

3

您沒有正確使用mat2cell。以下是如何使用它:

C = mat2cell(resultStack.('f'), ones(stacksize,1), ones(1,4)) 

這意味着:您指定輸出單元格C的每一行都應包含在未來1行的resultStack.f 1列(這是後面那些1的原因)。

另外,由Colin T.鮑爾斯所指示的,應該使用barece索引(()),以來自其他小區複製的東西,只有用托架索引({})時從細胞retreiving數據。

因此,你的代碼完成後,修改後的版本應該是:

stacksize = size(resultStack.('f'),1); % 2897 values 
exportc = cell(stacksize+1, 4); 

exportc(1,:) = {'top' 'bottom' 'left' 'right'}; 
exportc(2:end,:) = mat2cell(resultStack.('f'), ones(stacksize,1), ones(1,4)); 

另外,由於所需輸出允許的話,你可以使用更新,更好,更簡單,num2cell命令:

exportc(1,:)  = {'top' 'bottom' 'left' 'right'}; 
exportc(2:end,:) = num2cell(resultStack.('f')); 
+0

糟糕+1,我不應該認爲只有一個問題。接得好。 –

+0

@ColinTBowers:如果在我的程序設計中學到了一件事情,那就是* test *,* test *,* test *,* test *,* test *,* test *,* test *,* test *,* test *,*測試*,*測試*,*測試*,*測試*,*測試*,*測試*,*測試*,*測試*,*測試*,然後*測試* –

+0

什麼是合適的meta在這裏?我應該刪除我的答案,還是將它與我​​目前包含的更新保持一致,並將OP指向您的答案? –

0

更新: Rody發現你的代碼中的第二個問題超出了我在這裏提到的那個。您應該將完全更正的解決方案併入您的代碼中,如果您對此感到滿意,請將其答案標記爲答案。不要將此答覆標記爲答案,因爲它不完整。

使用分配單元陣列到另一個單元陣列的一個子集時,如

%# A simple example 
A = cell(2, 2); 
B = {'hello', 'world'}; 
A(1, :) = B; 

在你的代碼,你需要改變你的最後一行括號()

exportc(2:end,:) = mat2cell(resultStack.('f'), 1:stacksize, 1:4); 

注意花括號{}被保留用於索引單元陣列的單個單元格的內容。