MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Given a matrix, find position of first non-zero

  • To: mathgroup at smc.vnet.net
  • Subject: [mg99512] Re: [mg99492] Given a matrix, find position of first non-zero
  • From: Bob Hanlon <hanlonr at cox.net>
  • Date: Thu, 7 May 2009 06:33:06 -0400 (EDT)
  • Reply-to: hanlonr at cox.net

A = {{0, 0, 5}, {50, 0, 100}, {0, 75, 100}, {75, 100, 0}, {0, 75, 
    100}, {0, 75, 100}};

Union[Position[A, _?(# != 0 &)], SameTest -> (#1[[1]] == #2[[1]] &)]

{{1, 3}, {2, 1}, {3, 2}, {4, 1}, 
   {5, 2}, {6, 2}}


Bob Hanlon

---- Nasser Abbasi <nma at 12000.org> 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



  • Prev by Date: Re: GRAPHICS IN A DO LOOP DOES NOTHING
  • Next by Date: copy and paste to other programs
  • Previous by thread: Re: Odd ordering of results?
  • Next by thread: copy and paste to other programs