所以我有一个由数字和空括号组成的1x348单元格。即...... [] [] [] [169] [170] [170] [170] [171] [172] [] [] ...... 我想要做的就是将重复的数字改为空括号[]。我需要抓住这些地方。我试过这个,但没有成功。它也不理想,因为在有多个重复的情况下,它只会用[]替换所有其他重复。
for jj = 1:length(testcell);
if testcell{jj} == testcell{jj-1}
testcell{jj} = []
end
非常感谢任何帮助: - )
答案 0 :(得分:2)
您的代码唯一缺少的是存储当前值的变量:
current = testcell{1};
for jj = 2:length(testcell)
if testcell{jj} == current
testcell{jj} = [];
else
current = testcell{jj};
end
end
但最好使用Daniel's solution =)。
答案 1 :(得分:2)
假设您有{1,1,1}
。第一次迭代会将其更改为{1,[],1}
,第二次迭代不会看到任何重复。因此,向后迭代可能是最简单的解决方案:
for jj = length(testcell):-1:2
if testcell{jj} == testcell{jj-1}
testcell{jj} = [];
end
end
然后第一步将产生{1,1,[]}
,第二步产生{1,[],[]}
答案 2 :(得分:1)
或者,您可以使用NaN
值来表示具有空矩阵的单元格,并对代码进行矢量化:
testcell(cellfun('isempty', testcell)) = {NaN};
[U, iu] = unique([testcell{end:-1:1}]);
testcell(setdiff(1:numel(testcell), numel(testcell) - iu + 1)) = {NaN};
testcell(cellfun(@isnan, testcell)) = {[]};