# Function that returns index of first occurrence of largest value for each column of matrix

4 views (last 30 days)
Matthew Cooper on 10 Sep 2015
Edited: Cedric Wannaz on 11 Sep 2015
Hi,
I would like to write a function that returns the index of the first occurrence of the largest value in each column of a matrix. Ideally it would also have the flexibility to specify the row or the columns as the search direction, and/or could work for N-dimensional matrices.
I thought that the following would work:
function [ maxind ] = findmax( indata,k,varargin )
maxind = find(indata == max(indata),k,varargin(:));
end
But, when I pass a matrix into the function I get the following error:
maxind = findmax(indata,1,'first')
Undefined function 'find' for input arguments of type 'cell'.
Error in findmax (line 6)
maxind = find(indata == max(indata),k,varargin(:));

Cedric Wannaz on 11 Sep 2015
Edited: Cedric Wannaz on 11 Sep 2015
Another solution, almost trivial, is just to use the second output of MAX, which is the index of the first occurrence, and to flip along dim if there is a 3rd input arg. not starting with 'f'.
function maxInds = findMax( A, dim, direction )
if nargin < 2
dim = 1 ;
end
if nargin < 3
direction = 'f' ;
end
if direction(1) == 'f'
[~, maxInds] = max( A, [], dim ) ;
else
[~, maxInds] = max( flip( A, dim ), [], dim ) ;
maxInds = size( A, dim ) + 1 - maxInds ;
end
end