Remove array elements but also store the element indices that were not removed
Afficher commentaires plus anciens
I have a long array e.g. a = ["a", "b", "c", "d", "e" ,"f"]
I want to remove first and 5th element. u = [1,5]
For that I can do a(u) = []
But I also want the element indices that were not removed i.e. I want output as [2 3 4 6]
I tried a(~u) but it is not working.
Réponse acceptée
Plus de réponses (1)
There are several ways. Here are two:
a = ["a", "b", "c", "d", "e" ,"f"]
rowsToRemove = [1, 5];
aExtracted = a(rowsToRemove)
aKept = setdiff(a, aExtracted)
% Another way
aKept2 = a; % Initialize
aKept2(rowsToRemove) = []
3 commentaires
Image Analyst
le 23 Nov 2022
Modifié(e) : Image Analyst
le 23 Nov 2022
I know you really really wanted to use ~ but I think using [] is easier and preferable. This is about as compact as you can get (two lines of code to give the two vectors) and doesn't use setdiff, though it removes the elements from a, thus changing it. If you want to keep a copy of the original, then make a copy first.
a = ["a", "b", "c", "d", "e" ,"f"];
rowsToRemove = [1, 5];
aExtracted = a(rowsToRemove)
a(rowsToRemove) = []
If you really insist on using ~, here is one way is can be done:
a = ["a", "b", "c", "d", "e" ,"f"]'
indexes = 1 : numel(a);
rowsToRemove = [1, 5];
logicalIndexes = ismember(indexes, rowsToRemove)
aExtracted = a(rowsToRemove)
aKeepers = a(~logicalIndexes)
a = [10 20 30 40 50 60 70];
indexes = 1 : numel(a);
rowsToRemove = [1, 5];
logicalIndexes = ismember(indexes, rowsToRemove)
aExtracted = a(rowsToRemove)
aKeepers = a(~logicalIndexes)
% Also log what indexes are kept.
keeperIndexes = indexes(~logicalIndexes)
Catégories
En savoir plus sur Matrix Indexing dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!