how to delete all row contain a 1's and how to delete a column contain 1's. Q=[3 1 1 0 0 1;1 3 1 0 1 0;1 1 3 1 0 0;0 0 1 3 1 1;0 1 0 1 3 1;1 0 0 1 1 3]

1 view (last 30 days)
Kajal Agrawal
Kajal Agrawal on 22 Jun 2022
Edited: Jon on 23 Jun 2022
Q=[3 1 1 0 0 1;1 3 1 0 1 0;1 1 3 1 0 0;0 0 1 3 1 1;0 1 0 1 3 1;1 0 0 1 1 3]
i want to delete rows that contain a 1's and also column that contain 1's.
as in this example the first row contain 1's in 2,3,6 column ..so deleted it. now the first column contain a 1's in 2,3,6. so deleted this rows.now the resulted matrix should be [3 1: 1 3]. i want to check it for any n*n matrix.
thanku.

Accepted Answer

Jan
Jan on 22 Jun 2022
Following your instructions: "Actually firstly i want to deleted the all columns that contain a 1's in first row. Then we check in the first column that contain a 1's then we deleted the rows" I get another result:
Q = [3 1 1 0 0 1;1 3 1 0 1 0;1 1 3 1 0 0;0 0 1 3 1 1;0 1 0 1 3 1;1 0 0 1 1 3]
Q = 6×6
3 1 1 0 0 1 1 3 1 0 1 0 1 1 3 1 0 0 0 0 1 3 1 1 0 1 0 1 3 1 1 0 0 1 1 3
Q(Q(:, 1) == 1, :) = [];
Q(:, Q(1, :) == 1) = [];
Q
Q = 3×3
3 0 0 0 3 1 0 1 3

More Answers (2)

Jon
Jon on 22 Jun 2022
Edited: Jon on 22 Jun 2022
icd = any(Q==1,1)
ird = any(Q==1,2)
Qnew = Q(~ird,~icd)
In the example matrix you provide, every row and every column contain a 1 so the result will be an empty matrix
  4 Comments

Sign in to comment.


Karim
Karim on 22 Jun 2022
Edited: Karim on 22 Jun 2022
you can use some logic to find them:
% using example data
Q = [3 1 1 0 0 1;1 3 1 0 1 0;1 1 3 1 0 0;0 0 1 3 1 1;0 1 0 1 3 1;1 0 0 1 1 3]
Q = 6×6
3 1 1 0 0 1 1 3 1 0 1 0 1 1 3 1 0 0 0 0 1 3 1 1 0 1 0 1 3 1 1 0 0 1 1 3
Val = 1;
% find the rows and columns that contain the value "1"
RowIdx = any(Q==Val, 2);
ColIdx = any(Q==Val, 1)';
Q = Q(~RowIdx,~ColIdx); % keep the rows and columns of intrest
% display result
Q
Q = []
as you can see, using your example data all rows and colums are deleted... hence below with some random data
Q = randi([0 15],10,10)
Q = 10×10
2 13 2 12 0 10 5 13 9 7 8 4 10 12 13 1 12 0 4 7 12 4 7 8 10 13 2 5 4 13 0 6 15 8 10 7 5 12 0 0 0 0 9 7 7 7 6 5 1 8 8 5 7 4 15 3 13 12 0 2 1 3 9 13 10 1 0 10 2 12 14 15 15 9 9 15 2 1 5 0 6 9 10 8 2 6 2 9 0 4 12 14 13 14 1 8 14 9 4 4
Val = 1;
% find the rows and columns that contain the value "1"
RowIdx = any(Q==Val, 2);
ColIdx = any(Q==Val, 1)';
Q = Q(~RowIdx,~ColIdx); % keep the rows and columns of intrest
% display result
Q
Q = 5×5
13 2 12 5 7 4 7 8 2 13 6 15 8 5 0 5 7 4 13 2 9 10 8 2 4
  3 Comments
Jon
Jon on 23 Jun 2022
It happens to me frequently, that is I submit something only to find that there is already a similar answer. Good in a way, it shows that there is some consensus on the approach

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!