From help-octave-request at bevo dot che dot wisc dot edu Mon Nov 10 03:22:26 1997 Subject: Re: Simple Matrix Manipulation Extressions From: Dirk Laurie To: john at arrows dot demon dot co dot uk (john) Date: Mon, 10 Nov 1997 11:18:28 +0200 (SAT) john wrote: > > Are there any simple expressions for these octave expressions: > In each case I introduce loops, multiplications or something a bit > horrible to achieve something fairly simple. > > 5. given a (big) matrix A, and (small) vector V, for each element a > of A find the number of V elements smaller than a > > count = zeros(size(A)) ; > for r=1:n > count = count + (V(r) < A) ; > endfor > > Is there a way to avoid the loop? we can sort the V if that helps. > > For A a scalar we might do something like > > count = sum( V < A ) ; > do_fortran_indexing=1; [x,j]=sort(A(:)); % The method works for two vectors [x,k]=sort([x; v(:)]); m=1:length(k); m(k)=1:length(k); count=A; count(j)=m(1:length(j))-(1:length(j)); I suppose this is `a bit horrible' but it does have complexity less than length(x)*length(v) and there are no loops. It will not work properly if the internal sorting algorithm of octave allows equal elements to exchange places. Dirk