Delete multiple elements from matrix, that match value at once

75 views (last 30 days)
Hello everybody,
I wanted to know if there is a possibility do remove certain elements from a matrix at once, that match a specific value, without using the indexes?
You can do it with single values like this:
A(A==cerain_value)=[];
or
A(A<cerain_value)=[];
But what if there are multiple values I want to have removed?
Like :
A=[1,2,3,4,5;3,4,6,7,8;1,2,4,5,6;8,7,6,3,4;1,2,3,4,5];
and I want to remove every 1,3 and 5, without any loop or going with the indexes instead of the values.
How is this possible?
A(A==[1,2,5])=[];
does not work.
Many thanks in advance.
Best regards
Marc

Accepted Answer

Stephen23
Stephen23 on 14 May 2020
Edited: Stephen23 on 14 May 2020
The simple MATLAB solution is to use ismember to generate the indices:
>> A = [1,2,3,4,5;3,4,6,7,8;1,2,4,5,6;8,7,6,3,4;1,2,3,4,5];
>> A(ismember(A,[1,3,5])) = []
A =
8
2
4
2
7
2
6
4
6
4
7
4
8
6
4

More Answers (1)

Mehmed Saad
Mehmed Saad on 14 May 2020
Edited: Mehmed Saad on 14 May 2020
A=[1,2,3,4,5;3,4,6,7,8;1,2,4,5,6;8,7,6,3,4;1,2,3,4,5];
R = [1 2 5];
L=arrayfun(@(x) A==x,R,'uni',0);
A(any(cat(3,L{:}),3)) = [];

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!