Matrix-vector boolean comparison

I might be having a brain fart, but if I'm not...
I have a matrix M (mxn) and a vector V (mx1). On each row of M, I want to see how many elements are greater than the element on the corresponding row of V. That is, I want R, where
for i=1:m;
R(i)=length(find( M(i,:) > V(i)));
end
My question is - can I do this without a loop? Is there a one line operation for this? I know the loop in the example is trivial, but I'm trying to optimize code that takes hours to run and where I run through the loop many many times.

 채택된 답변

Sean de Wolski
Sean de Wolski 2011년 10월 11일

0 개 추천

Sure:
R = sum(bsxfun(@gt,M,V),2)
Also note, just preallocating R would save you a lot of time for large m.
R = zeros(m,1);
for ii =...
R(ii) = ...
end

댓글 수: 1

Greg
Greg 2011년 10월 11일
Awesome. Preallocating was done, smarter things weren't. Thanks!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 MATLAB에 대해 자세히 알아보기

질문:

2011년 10월 11일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by