How do I change a whole row/column to zero in a matrix relating to a 'greater than' condition.
52 ビュー (過去 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 で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!