如何在MATLAB中从单元格数组中删除零

时间:2018-10-09 08:48:11

标签: matlab cell

我有一个名为sequences (406 x 1)的单元格,其中每个单元格均为(1x25 double)

sequences=randi(5,406,25); #create an array with values max 5, 406x25
sequences(50:65,5)=0; #Add zeros
sequences=num2cell(sequences,2); #convert to cell

我想从任何单元中删除任何零,并保持结构不变(只是删除单个零)。我已经尝试过堆栈和MathWorks的所有答案,但是没有什么可以改变它们的。

例如1

idxZeros = cellfun(@(c)(isequal(c,0)), sequences);
sequences(idxZeros) = [];

根本不更改单元格的任何内容。

例如2

zero_idx = bsxfun(@eq, [sequences{:}], 0);
sequences(zero_idx) = {[]};

例如3

 sequences([sequences{:}]==0)={[]};

删除单元格负载

注意:我不介意将其保留为数组,删除零并重塑形状,但是我确实需要在其末尾添加一个单元格。 任何想法将不胜感激

1 个答案:

答案 0 :(得分:2)

这会从任何单元格中删除任何零,并将结果保留在每个单元格中作为行向量:

result = cellfun(@(x) nonzeros(x).', sequences, 'UniformOutput', false);

或者您也可以通过逻辑索引替换nonzeros

result = cellfun(@(x) x(x~=0), sequences, 'UniformOutput', false);