Matlab细胞阵列数据

时间:2014-05-17 21:50:06

标签: arrays matlab cell-array

我有一个单元格数组,它是100x1,变量名是CellA。正如您将从附加的png文件中看到的那样,单元格数组在100个不同的单元格中包含各种大小的矩阵。

我想提取这些数据。实际上,我试图找到每个单元格中的唯一元素的数量及其频率。下面是我的代码,它会出现尺寸错误:

for i=1:length(CellA)
 if isempty(CellA{i})
     continue;% do nothing
 else
     unqmz(i,:) = unique(CellA{i})';
     countmz(i,:) = histc(CellA{i}, unqmz(i))';
 end

最终,我想绘制每个不同单元阵列的计数与唯一编号,其中该单元的总计数超过预定值。例如)4

cell snippet

2 个答案:

答案 0 :(得分:1)

看看这是否适合你 -

%// Get result data into unqmz and countmz
unqmz = cell(numel(CellA),1);
countmz = cell(numel(CellA),1);

for ii=1:numel(CellA)
    if isempty(CellA{ii})
        continue;% do nothing
    else
        unqmz(ii) = {unique(CellA{ii})'} %//'
        countmz(ii) = {histc(CellA{ii}, cell2mat(unqmz(ii)))'} %//'
    end
end

%// Count of number of unique numbers in each cell
count_uniqs = cellfun(@numel,unqmz);

%// Plot (assuming you want to plot everything in one figure window)
figure,
for k = 1:size(countmz,1)
    if count_uniqs(k)>4
        plot(cell2mat(unqmz(k)),cell2mat(countmz(k)),'x')
        hold on
    end
end

答案 1 :(得分:1)

你也可以这样做:

unqmz = cellfun(@unique, CellA, 'uni', 0);
countmz = arrayfun(@(n) histc(CellA{n},unqmz{n}), 1:numel(CellA), 'uni', 0).';