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 で Loops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by