我有一个名为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)={[]};
删除单元格负载
注意:我不介意将其保留为数组,删除零并重塑形状,但是我确实需要在其末尾添加一个单元格。 任何想法将不胜感激
答案 0 :(得分:2)
这会从任何单元格中删除任何零,并将结果保留在每个单元格中作为行向量:
result = cellfun(@(x) nonzeros(x).', sequences, 'UniformOutput', false);
或者您也可以通过逻辑索引替换nonzeros
:
result = cellfun(@(x) x(x~=0), sequences, 'UniformOutput', false);