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)
Show older comments
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.
0 Comments
Accepted Answer
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(Q(:, 1) == 1, :) = [];
Q(:, Q(1, :) == 1) = [];
Q
0 Comments
More Answers (2)
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
Jon
on 22 Jun 2022
Q = 3×3
3 0 0
0 3 1
0 1 3
In your picture, it looks like you also delete the first row and the first column, is this done as a final step? If so, in this final step, do you just delete the first column or all of the columns up to an including the first column that contains a 1?
In this case you could do it like this:
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]
% delete columns where entry in first row is a 1
Q(:,Q(1,:)==1) = [];
% find first column that has a 1
idx = find(any(Q==1),1,'first');
% delete all the rows where 1 appears in the first column that has a 1
Q(Q(:,idx)==1,:)=[]
% delete the first row
Q(1,:) = []
% delete all of the columns up to the first one that had a 1
Q(:,1:idx)=[]
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]
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
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)
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
3 Comments
See Also
Categories
Find more on Logical 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!