A logical indexing for row-wise max

4 views (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)

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!