用空[] - MATLAB替换单元格的重复值

时间:2013-11-21 15:57:03

标签: arrays matlab

所以我有一个由数字和空括号组成的1x348单元格。即...... [] [] [] [169] [170] [170] [170] [171] [172] [] [] ...... 我想要做的就是将重复的数字改为空括号[]。我需要抓住这些地方。我试过这个,但没有成功。它也不理想,因为在有多个重复的情况下,它只会用[]替换所有其他重复。

for jj = 1:length(testcell);
    if testcell{jj} == testcell{jj-1}
        testcell{jj} = []
    end

非常感谢任何帮助: - )

3 个答案:

答案 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)) = {[]};