fullSeq='ABCDEFG'
Inputcell= {'ABC', 'BDEG','DEFG','ABCDEFG','CDEG','BCDF','ABCDEFG'}
我在上面的Inputcell
中有2 'ABCDEFG'
個字符串。我怎樣才能刪除這兩個字符串?預期結果應該是:在MATLAB中刪除單元格中的字符串
Outputcell= {'ABC', 'BDEG','DEFG','CDEG','BCDF'}
fullSeq='ABCDEFG'
Inputcell= {'ABC', 'BDEG','DEFG','ABCDEFG','CDEG','BCDF','ABCDEFG'}
我在上面的Inputcell
中有2 'ABCDEFG'
個字符串。我怎樣才能刪除這兩個字符串?預期結果應該是:在MATLAB中刪除單元格中的字符串
Outputcell= {'ABC', 'BDEG','DEFG','CDEG','BCDF'}
您可以strcmp
一起使用邏輯索引:
OutputCell = Inputcell(~strcmp(Inputcell,fullSeq))
OutputCell =
'ABC' 'BDEG' 'DEFG' 'CDEG' 'BCDF'
耶!
簡單的調用ismember
會做的伎倆與邏輯索引組合:
fullSeq='ABCDEFG';
Inputcell= {'ABC', 'BDEG','DEFG','ABCDEFG','CDEG','BCDF','ABCDEFG'};
Outputcell = Inputcell(~ismember(Inputcell, fullSeq));
我們得到:
>> Outputcell
Outputcell =
'ABC' 'BDEG' 'DEFG' 'CDEG' 'BCDF'
玩得真好!我想知道'strcmp'和'ismember'之間哪個更快?:) –
如果由於某種原因,你想自動刪除出現在每一個元素至少兩次(而不必以fullSeq
的各種值運行上述答案),您也可以這樣做:
iif = @(varargin) varargin{2*find([varargin{1:2:end}], 1, 'first')}(); %define inline 'if'
Inputcell={'ABC', 'BDEG','DEFG','ABCDEFG','CDEG','BCDF','ABCDEFG'};
Tempcell=cellfun(@(x)iif(sum(strcmp(x,Inputcell))>1,[],true,x),Inputcell,...
'uniformoutput',false);
Outputcell=Tempcell(~cellfun('isempty',Tempcell))
結果:
Outputcell =
'ABC' 'BDEG' 'DEFG' 'CDEG' 'BCDF'
可能要簡單得多。對於這個特定的應用程序,「ismember」可能是矯枉過正的。 +1。 – rayryeng