[Date Index]
[Thread Index]
[Author Index]
Re: Given a matrix, find position of first non-zero element in each
*To*: mathgroup at smc.vnet.net
*Subject*: [mg99567] Re: Given a matrix, find position of first non-zero element in each
*From*: CaveSnow <cavesnow at gmail.com>
*Date*: Fri, 8 May 2009 00:15:14 -0400 (EDT)
*References*: <gtrl9k$242$1@smc.vnet.net> <gtudp6$j5j$1@smc.vnet.net>
On May 7, 12:39 pm, Szabolcs Horv=E1t <szhor... at gmail.com> wrote:
> Nasser Abbasi wrote:
> > This is a little problem I saw in another forum, and I am trying to als=
o
> > 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 wan=
ted to
> > see if I could avoid using a Table, and solve it just using Patterns an=
d
> > 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?
>
> Here's one solution:
>
> MapIndexed[{First[#2], 1 + LengthWhile[#1, # == 0 &]} &, A]
Yet another one:
In[23]:= Transpose[{Range[Dimensions[A][[1]]],
Flatten[Position[#, _?(# != 0 &), 1, 1] & /@ A]}]
Out[23]= {{1, 3}, {2, 1}, {3, 2}, {4, 1}, {5, 2}, {6, 2}}
Prev by Date:
**Re: copy and paste to other programs**
Next by Date:
**Re: TraditionForm Appears to be Inconsistent**
Previous by thread:
** Re: Given a matrix, find position of first non-zero element in each**
Next by thread:
**BinaryReadList**
| |