How do I change a whole row/column to zero in a matrix relating to a 'greater than' condition.
조회 수: 24 (최근 30일)
이전 댓글 표시
I have a random network and I would like to make the rows which have the largest sum equal to zero.
A=createsrandomnetwork(100,5)
U=sum(A)
Say the 1st and 50th number in U are the largest, I would want to make that number row and column equal to zero. I know that I could do it by noting down these numbers and then doing this:
A(1,:)=0
A(50,:)=0
A(:,1)=0
A(:,50)=0
But is there an easier, more automatic way where I could say if a value in U is greater than 5 then change the corresponding column/row to zero?
댓글 수: 0
채택된 답변
Guillaume
2016년 11월 8일
To set the rows/columns where the maximum sum is found:
maxsum = max(U); %I'm assuming that U is a vector here
A(U == maxsum, :) = 0;
A(:, U == maxsum) = 0;
To set rows/columns where U is greater than a value
A(U > 5, :) = 0;
A(:, U > 5) = 0;
댓글 수: 2
Guillaume
2016년 11월 12일
sort the U vector, the first four values of the 2nd output of sort are the indices of the rows you want to zero:
[~, idx] = sort(U, 'descend');
A(idx(1:4), :) = 0;
추가 답변 (1개)
Alexandra Harkai
2016년 11월 8일
> But is there an easier, more automatic way where I could say if a value in U is greater than 5 then change the corresponding column/row to zero?
Using logical indexing, you can use 'U>5' to indicate which rows/columns you want to change:
U = sum(A, 2); % sum of rows
disp(U > 5); % display 0-1 values where condition of false/true
A(:, U>5) = 0; % columns
A(U>5, :) = 0; % rows
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!