2016-03-04 148 views
0

請,我需要任何人的幫助。我有許多行和兩列的單元陣列。第二列有不同長度的元素。有些是一個,兩個,三個和四個元素。我想使用cell2mat將第2列中的這些元素從單元格轉換爲雙精度值並將其存儲在新變量中。我一直在遇到這個錯誤「賦值有更多非單實例rhs維度比非單實例下標」。我已經嘗試了很多次來解決這個問題,但我沒有解決方案。誰能幫忙?我的代碼可以在下面看到。索引到單元陣列

for i = 1:length(p) 
    ps(i,:) = cell2mat(p{i,1}(1,2)) 
end 
+0

矩陣必須有固定的長度和寬度,如果你已經在你的第二個柱變長預分配ps,你要墊具有零點的元素的列很少? – GameOfThrows

+0

用零填充不會對最終結果做任何事情。 –

回答

0

你需要指定列範圍(明確的)輸入數據和MATLAB將自動擴展ps適當地滿足您的數據(在空單元格用零填充);

for k = 1:numel(p) 
    data = cell2mat(p{k,1}(1,2)); 
    ps(k, 1:numel(data)) = data; 
end 

顯然,這有一定的性能問題,因爲你與每次循環改變ps大小。

如果你願意,你可以像這樣的東西

allData = cellfun(@(x)cell2mat(x(1,2)), p(:,1), 'uniform', 0); 
ps = zeros(numel(allData), max(cellfun(@numel, allData))); 
+0

當使用上面的代碼運行數據時,我收到此錯誤「索引超出矩陣尺寸」。 –

+0

@ K.Sante哪一行產生錯誤?它建模在你提供的輸入之後,所以可能是'p'的條目不需要至少有1行和2列(如你在文章中假設的那樣) – Suever

+0

這裏代碼產生錯誤,data = cell2mat(P {K,1}(1,2));.謝謝。 –