Re: HELP: How to do count to the SUB-LIST

*To*: mathgroup at smc.vnet.net*Subject*: [mg82128] Re: [mg82096] HELP: How to do count to the SUB-LIST*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Sat, 13 Oct 2007 03:43:09 -0400 (EDT)*References*: <200710120651.CAA04299@smc.vnet.net> <C25D4397-C5F7-426A-850E-B9E6AA98859B@mimuw.edu.pl>

On 12 Oct 2007, at 22:30, Andrzej Kozlowski wrote: > > On 12 Oct 2007, at 15:51, zhen wrote: > >> Hallo, everyone >> >> I am new to Mathematica, and I get one problem now, hope to get some >> help here >> >> I got a list like this: >> >> {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 0, 0, 0, 1, 0, 0, 0}, >> {0, 0, 0, 0, 1, 1, 0, 0, 2, 0}, {1, 0, 1, 0, 0, 1, 0, 1, 0, 0}, >> {1, 3, 3, 4, 2, 2, 5, 3, 2, 1}, {7, 2, 2, 3, 4, 4, 0, 3, 1, 3}} >> >> I need to get a list to show the number of non zero number in each >> sub >> list, as to say, I need to get a list like this: >> >> {0,3,3,4,10,9} >> >> Thanks alot! >> >> > > There are lots of ways, but one that I think should be pretty fast is: > > ls = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 0, 0, 0, 1, 0, 0, > 0}, {0, 0, > 0, 0, 1, 1, 0, 0, 2, 0}, {1, 0, 1, 0, 0, 1, 0, 1, 0, 0}, {1, 3, > 3, 4, 2, > 2, 5, 3, 2, 1}, {7, 2, 2, 3, 4, 4, 0, 3, 1, 3}}; > > Total[Transpose[UnitStep[ls - 1]]] > > {0, 3, 3, 4, 10, 9} > > At first I thought that the following (Mathematica 6 only) variant > would be faster > > Total[UnitStep[ls - 1], {2}] > {0, 3, 3, 4, 10, 9} > > but tests seem to show that this isn't the case. > > Andrzej Kozlowski > > > I guess I should add that the above code will only work if (as is your example) all your numbers are non-negative integers. If they are not, you might as well use: Map[Count[#, x_ /; x != 0] &, ls] which is the most obvious way to do this in general, but in the non- negative integer case is much slower than the first method. Andrzej Kozlowski

**References**:**HELP: How to do count to the SUB-LIST***From:*zhen <wangzhen0829@gmail.com>