Remove specific entry in a cell array
    조회 수: 188 (최근 30일)
  
       이전 댓글 표시
    
I want to remove an entry in a cell array if it is equal to something specifically. Explained in this example:
animals={'cat', 'dog', 'mouse', 'horse'};
"animals" is being redefined in a loop, and if it happens to be redefined with 'dog' as an entry, I want to remove it. So I want
animals={'cat', 'mouse', 'horse'};
I don't want to replace 'dog' with a blank (''), I want to remove that entry entirely and keep the array tight (i.e. reduce the dimensions from 4x1 to 3x1 in this case).
Thanks
댓글 수: 0
채택된 답변
  James Tursa
      
      
 2018년 1월 31일
        animals(ismember(animals,'dog')) = [];
댓글 수: 2
  Nischal Amin
 2022년 10월 10일
				This does not work for me. 
X = ('Cat', 'Dog', 'Tiger');
X = X(ismember(X,'Tiger')) == []
X should be 'Cat', 'Dog', Empty cell 
Basically, I don't want the X index to change. I just want to remove Tiger. So, when I do unique(X)...it displays only Cat and Dog.
  Jan
      
      
 2022년 10월 11일
				X = ('Cat', 'Dog', 'Tiger') is no valid Matlab syntax. For a cell array you need curly braces, not parentheses.
X(ismember(X,'Tiger')) == [] compares the cell {'Tiger'} with the empty matrix. It does not set anything to the empty cell.
X = {'Cat', 'Dog', 'Tiger'};
X(ismember(X,'Tiger')) = {''}
% Or faster:
X = {'Cat', 'Dog', 'Tiger'};
X(strcmp(X, 'Tiger')) = {''}
추가 답변 (2개)
  Akira Agata
    
      
 2018년 1월 31일
        Another way to do it:
idx = strcmp(animals,'dog');
animals(idx) = [];
댓글 수: 1
  Jan
      
      
 2018년 1월 31일
        animals = {'cat', 'dog', 'mouse', 'horse'};
animals = setdiff(animals, {'dog'})
This would allow to remove multiple elements at once.
댓글 수: 7
  RITESH KUMAR
 2019년 9월 18일
				can we write element number at place of dog. it is at 2nd place. can i write 2.
참고 항목
카테고리
				Help Center 및 File Exchange에서 Startup and Shutdown에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!







