Extract top 10 values from each row
조회 수: 4 (최근 30일)
이전 댓글 표시
Hello,
I have a matrix and wish to keep only the top 10 values in each row and replace all the other (bottom 90) values with zeros. Is there an efficient way to achieve this?
댓글 수: 0
채택된 답변
Walter Roberson
2011년 10월 10일
[sortvals, sortidx] = sort(A,'descend');
B = zeros(size(A),class(A));
for K = 1 : size(A,2)
B(sortidx(1:10,K),K) = sortvals(1:10,K);
end
Yes, it could probably be done without a loop, using sub2ind(), but that would not necessarily be any faster, and would probably be less clear.
댓글 수: 1
Walter Roberson
2011년 10월 10일
Adjusting for rows:
[sortvals, sortidx] = sort(A,2,'descend');
B = zeros(size(A),class(A));
for K = 1 : size(A,1)
B(K,sortidx(K,1:10)) = sortvals(K,1:10);
end
추가 답변 (1개)
Laura Proctor
2011년 10월 10일
This code will keep the top ten rows and replaces everything from the 11th row on with a zero.
A = rand(100);
A(11:end,:) = 0;
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!