faster winner takes all

I 've made an mplementation of the winner takes all rule (WTA) using a for loop (code bellow). But now I want to "harden" ~8 million values and the loop is very slow (several hours). Any idea for a faster WTA implementation? In detail, if we have a matrix with values in [0,1] we need to replace them with 1 for > 0.75 or with 0 for < 0.75.
function H = wta(S)
% Winner Takes All (WTA) rule
% returns the hard values for S
%
[row,col] = size(S);
for r = 1:row
if S(r,1) > 0.75
H(r,1) = 1;
else
H(r,1) = 0;
end
end

3 Kommentare

Walter Roberson
Walter Roberson am 6 Nov. 2011
Your code does not match your written requirements for the situation where S(r,1) is 0.75 exactly (which _is_ possible in binary floating point.)
Dimitris
Dimitris am 6 Nov. 2011
Correct, it is just that 0.75 is so arbitrary that it does not matter which way is goes. You are correct mathematically though.
Walter Roberson
Walter Roberson am 6 Nov. 2011
For 0.75 exactly, as you do not define any replacement conditions, the implication would be that those locations should not be replaced, leaving them 0.75 .

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 6 Nov. 2011

1 Stimme

H = S > .75;

2 Kommentare

Walter Roberson
Walter Roberson am 6 Nov. 2011
H = S(:,1) > 0.75;
would be a closer match to the code. The difference would be important if S is two-dimensional or S is a row vector.
Dimitris
Dimitris am 6 Nov. 2011
Many thanks.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Vector Fields finden Sie in Hilfe-Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by