Re: Given a matrix, find position of first non-zero element in each
- To: mathgroup at smc.vnet.net
 - Subject: [mg99509] Re: Given a matrix, find position of first non-zero element in each
 - From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
 - Date: Thu, 7 May 2009 06:32:33 -0400 (EDT)
 - Organization: Uni Leipzig
 - References: <gtrl9k$242$1@smc.vnet.net>
 - Reply-to: kuska at informatik.uni-leipzig.de
 
Hi,
Map[Min, Transpose /@
   Split[Position[A, a_ /; a =!= 0, {2}, Heads -> False ],
    First[#1] === First[#2] &], {2}]
?
Regards
   Jens
Nasser Abbasi wrote:
> This is a little problem I saw in another forum, and I am trying to also 
> solve it in Mathematica.
> 
> Given a Matrix, I need to find the position of the first occurance of a 
> value which is not zero in each row.
> 
> The position found will be the position in the orginal matrix ofcourse.
> 
> So, given this matrix,
> 
> A = {
> {0, 0, 5},
> {50, 0, 100},
> {0, 75, 100},
> {75, 100, 0},
> {0, 75, 100},
> {0, 75, 100}
> };
> 
> The result should be
> 
> {{1, 3}, {2, 1}, {3, 2}, {4, 1}, {5, 2}, {6, 2}}
> 
> This is how I solved this problem and after a bit of  struggle. I wanted to 
> see if I could avoid using a Table, and solve it just using Patterns and 
> Position and Select, but could not so far.
> 
> 
> Table[Flatten[{i, Flatten[Position[A[[i,All]], _?(#1 != 0 & ), 1, 1]]}], {i, 
> 1, 6}]
> 
> Out[174]= {{1, 3}, {2, 1}, {3, 2}, {4, 1}, {5, 2}, {6, 2}}
> 
> I am not happy with the above solution. I am sure there is a better one (the 
> above also do not work well when one row has all zeros).
> 
> Do you see a better and more elegant way to do this?
> 
> thanks,
> --Nasser
> 
> 
>