2013-11-21 45 views
0

所以我有一個由數字和空括號組成的1x348單元。即... [] [] [] [169] [170] [170] [170] [171] [172] [] [] ... 我想要做的是將重複的數字更改爲空括號[]。我需要持有這些地方。我試過了,但沒有成功。這也不是理想的,因爲在不止一次重複的情況下,它只會用[]代替所有其他重複。用空[]替換單元格的重複值 - MATLAB

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

任何幫助,將不勝感激:-)

回答

2

代碼缺少的唯一的事情是一些變量來存儲當前值:

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

但最好使用Daniel's solution =)。

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,[],[]}

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)) = {[]}; 
+0

+1 isempty'的''中的cellfun'引述版本! –

+0

@LuisMendo謝謝。這也使用「獨特」來處理重複值不連續的情況,但也許這是一種矯枉過正的情況。 –

相關問題