Remove specific entry in a cell array
174 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Akzeptierte Antwort
James Tursa
am 31 Jan. 2018
animals(ismember(animals,'dog')) = [];
2 Kommentare
Nischal Amin
am 10 Okt. 2022
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
am 11 Okt. 2022
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')) = {''}
Weitere Antworten (2)
Akira Agata
am 31 Jan. 2018
Another way to do it:
idx = strcmp(animals,'dog');
animals(idx) = [];
1 Kommentar
Jan
am 31 Jan. 2018
animals = {'cat', 'dog', 'mouse', 'horse'};
animals = setdiff(animals, {'dog'})
This would allow to remove multiple elements at once.
7 Kommentare
RITESH KUMAR
am 18 Sep. 2019
can we write element number at place of dog. it is at 2nd place. can i write 2.
Siehe auch
Kategorien
Mehr zu Startup and Shutdown finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!