can this be done without a for loop?
이전 댓글 표시
I have a huge matrix M such that each row is ascending ordered. I find if/where each row exceeds a certain threshold by looking at the last column of cumsum(M>threshold,2).
Rows that do not exceed threshold are left unchanged. For each row that does exceed the threshold, I find the first element on that row that's larger than the threshold and set it to -1. Note that these elements will be on different columns. Then, all elements between -1 and the end of the row are set to zero. For example,
M=[1 2 3 4; 1 4 6 8; 2 6 7 9]; threshold=5;
I need
result=[1 2 3 4; 1 4 -1 0; 2 -1 0 0];
Thanks!
채택된 답변
추가 답변 (2개)
Sean de Wolski
2012년 1월 20일
So something like:
A = sort(magic(5),2); %determinant sample data
thresh = 22; %greater than this
idx = A>thresh; %index
rows = any(idx,2); %which rows?
A(rows,:) = -1; %set 'em to -1
A(idx) = 0; %change back the parts that weren't
Luke
2012년 1월 20일
댓글 수: 1
Sean de Wolski
2012년 1월 20일
for medium to large M, sub2ind is probably slower than a for loop.
카테고리
도움말 센터 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!