Is it possible to vectorize for only one input?
6 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
sykim14
am 29 Jun. 2016
Kommentiert: José-Luis
am 29 Jun. 2016
Suppose there are two variables.
v1 = [1 2 3];
m1 = [1 2 3; 4 5 6];
I hope to create another matrix m2, having the same size with m1, and its (i, j) component is defined by
m2(i, j) = sum(v1 > m1(i, j))
In this case, clearly one solution is use "for" loop twice.
m2 = zeros(2, 3);
for i = 1:2
for j = 1:3
m2(i, j) = sum(v1 > m1(i, j));
end
end
However I want to know whether we can apply vectorization for the above procedure. To do this, I first thought that I may create an anonymous function
test_opr = @(v, x) sum(v > x);
and vectorize for the only latter input(while fixing v). But I couldn't find a proper way to do this. Is there any useful trick or alternative?
Thanks in advance.
0 Kommentare
Akzeptierte Antwort
José-Luis
am 29 Jun. 2016
Bearbeitet: José-Luis
am 29 Jun. 2016
v1 = [1, 2, 3]; m1 = [1, 2, 3; 4, 5, 6];
your_result = arrayfun(@(x) sum(v1 > x), m1)
Though this is just syntactic sugar around looping. Maybe faster, would need to test:
v1 = reshape(v1,1,1,[]);
alt_result = sum(bsxfun(@lt,m1,v1),3)
2 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!