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]
조회 수: 2 (최근 30일)
이전 댓글 표시
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
채택된 답변
Jan
2022년 6월 22일
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
추가 답변 (2개)
Jon
2022년 6월 22일
편집: Jon
2022년 6월 22일
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
Jon
2022년 6월 22일
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
2022년 6월 22일
편집: Karim
2022년 6월 22일
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
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!