Remove array elements but also store the element indices that were not removed

조회 수: 2(최근 30일)
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.

채택된 답변

Steven Lord
Steven Lord 2022년 11월 23일
Do you want the indices or the elements that weren't deleted?
a = ["a", "b", "c", "d", "e" ,"f"];
u = [1 5];
indToKeep = setdiff(1:numel(a), u)
indToKeep = 1×4
2 3 4 6
I'm going to make a copy of a so you can compare the original with the modified copy.
a1 = a;
deletedElements = a1(u) % Extract elements 1 and 5 first
deletedElements = 1×2 string array
"a" "e"
a1(u) = [] % Then delete them from the orignnal vector
a1 = 1×4 string array
"b" "c" "d" "f"
  댓글 수: 1
Mohd Aaquib Khan
Mohd Aaquib Khan 2022년 11월 23일
thank you, I will accept this after some time,
Actually I am currently using the same logic using setdiff(). Was just exploring if there were some easier,shorter ways to do it. Especially using '~'
Thanks again

댓글을 달려면 로그인하십시오.

추가 답변(1개)

Image Analyst
Image Analyst 2022년 11월 23일
There are several ways. Here are two:
a = ["a", "b", "c", "d", "e" ,"f"]
a = 1×6 string array
"a" "b" "c" "d" "e" "f"
rowsToRemove = [1, 5];
aExtracted = a(rowsToRemove)
aExtracted = 1×2 string array
"a" "e"
aKept = setdiff(a, aExtracted)
aKept = 1×4 string array
"b" "c" "d" "f"
% Another way
aKept2 = a; % Initialize
aKept2(rowsToRemove) = []
aKept2 = 1×4 string array
"b" "c" "d" "f"
  댓글 수: 3
Image Analyst
Image Analyst 2022년 11월 23일
a = [10 20 30 40 50 60 70];
indexes = 1 : numel(a);
rowsToRemove = [1, 5];
logicalIndexes = ismember(indexes, rowsToRemove)
logicalIndexes = 1×7 logical array
1 0 0 0 1 0 0
aExtracted = a(rowsToRemove)
aExtracted = 1×2
10 50
aKeepers = a(~logicalIndexes)
aKeepers = 1×5
20 30 40 60 70
% Also log what indexes are kept.
keeperIndexes = indexes(~logicalIndexes)
keeperIndexes = 1×5
2 3 4 6 7

댓글을 달려면 로그인하십시오.

제품


릴리스

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by