如何从单元格中提取元素

时间:2014-02-11 11:36:47

标签: matlab cell

我有一个包含许多不同尺寸的不同阵列的单元格。例如,这可能是我的单元格:

A = {[-1] [144x1 double] [-1] [331x1 double] [-1] [431x1 double] [-1] [512x1 double]}

我想用单元格中包含的所有数据做直方图。我试过做一个cell2mat:

B = cell2mat(A);

为了提取数据然后进行直方图,但是它给出了这个错误:

??? Error using ==> cat
CAT arguments dimensions are not consistent.
Error in ==> cell2mat at 81
            m{n} = cat(2,c{n,:});
Error in ==> function at 156
B = cell2mat(A);

我还尝试使用循环创建矩阵:

for j=1:length(A)

    B = [B; A{j}]

end

但问题在于MATLAB对所有数组使用相同的维度,并且用空填充空格。

如何正确实现这一目标?

1 个答案:

答案 0 :(得分:3)

如果所有单元格都包含大小为1 x n的矩阵,并且单元格数组的大小也为1 x n,则cell2mat将起作用。如果所有矩阵的大小为n x 1且单元阵列的大小为n x 1,则情况也是如此。

因此,在您给出的示例中,请尝试简单:

B = cell2mat(A');

更一般地说,循环适用于具有通用n x m内容的单元格数组,稍作修改:

B = [];
for n=1:length(A)    
    B = [B; A{n}(:)]
end