The solution by @DumpsterDoofus is no doubt the simplest and most elegant Mathematica solution. Just for fun I wrote a more direct construction, that gives both the maxima and their positions. mat={{0.803279,0.958913,0.600443,0.928255,0.425632,0.165858}, {0.550107,0.929972,0.990928,0.110509,0.803279,0.939139}, {0.693203,0.823982,0.645499,0.617851,0.461366,0.252978}, {0.277155,0.321569,0.796915,0.976772,0.462962,0.944314}}; maxvalues=mat[[1]]; maxpositions=Table[1, {Length[mat[[1]]]}]; Do[ maxpositions=MapThread[Max, {maxpositions, n (Sign[mat[[n]]-maxvalues]+1)/2}]; maxvalues=MapThread[Max,{maxvalues, mat[[n]]}], {n, 2, Length[mat]}]; maxvalues maxpositions (* {0.803279,0.958913,0.990928,0.976772,0.803279,0.944314} *) (* {1,1,2,4,2,4} *)