A logical indexing for row-wise max

1 view (last 30 days)
I'm wondering if there is anything simpler than:
x = [2 3;3 1]
[a,b]=max(x, [], 2);
% now return the matrix containing row-wise max logical indexes, in this example [0 1;1 0]
result = zeros(size(x));
for i=1:size(x,1)
result(i,b(i)) = 1;
end
I had thought to use
result = x==repmat(a,1,size(x,2))
But I'm afraid about floating-point issues

Accepted Answer

Azzi Abdelmalek
Azzi Abdelmalek on 12 Apr 2014
x = [2 3;3 1]
[a,b]=max(x, [], 2);
result = zeros(size(x));
result(sub2ind(size(x),1:size(x,1),b'))=1

More Answers (0)

Community Treasure Hunt

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

Start Hunting!