2016-03-04 77 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));.谢谢。 –