Discussion:
loop-free comparison of different sized vectors
(too old to reply)
José Ignacio Royo Prieto
2014-03-10 11:16:07 UTC
Permalink
Hello, everybody

I want to compare all the elements of two different sized vectors without using 'for' loops.

More precisely, if v and w are vectors of lengths n and m, respectively,
I want to produce a matrix A of dimensions nxm such that
A(i,j)=1 if v(i)>w(j) and 0 otherwise.

Of course, one can do that just using a loop going through all the elements of one of the vectors, something like

for i=1:length(v)
A(i,:)=v(i)>w
end

but I was looking for a "vectorialized" Octave command to do it more efficiently. It is a pity that just typing v>w of v.>w Octave prompts an error, and does not do what I intend to ;-)

Thanks you all for your time and attention.
p***@arcor.de
2017-06-08 04:59:45 UTC
Permalink
Post by José Ignacio Royo Prieto
Hello, everybody
I want to compare all the elements of two different sized vectors without using 'for' loops.
More precisely, if v and w are vectors of lengths n and m, respectively,
I want to produce a matrix A of dimensions nxm such that
A(i,j)=1 if v(i)>w(j) and 0 otherwise.
Of course, one can do that just using a loop going through all the elements of one of the vectors, something like
for i=1:length(v)
A(i,:)=v(i)>w
end
but I was looking for a "vectorialized" Octave command to do it more efficiently. It is a pity that just typing v>w of v.>w Octave prompts an error, and does not do what I intend to ;-)
Thanks you all for your time and attention.
Hello José,

I think that you could solve your problem like this:

a= rand(1,5)
b= rand(1,7)
diag(a>b')

gives you the elements in which a(i) > b(i), for instance.

Best regards
Peter
Andreas Weber
2017-06-16 06:15:38 UTC
Permalink
Post by José Ignacio Royo Prieto
More precisely, if v and w are vectors of lengths n and m, respectively,
I want to produce a matrix A of dimensions nxm such that
A(i,j)=1 if v(i)>w(j) and 0 otherwise.
A = v'>w;

Does what you want. This uses automatic broadcasting, you can also use
it explicitely with "bsxfun"

-- Andy

Loading...