RE: Any better way for finding frequencies of list entries?
- To: mathgroup at smc.vnet.net
- Subject: [mg26947] RE: [mg26923] Any better way for finding frequencies of list entries?
- From: "David Park" <djmp at earthlink.net>
- Date: Sat, 27 Jan 2001 20:00:13 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Elegance or speed? In any case, converting to strings and characters is excessive and unnecessary. Here is one solution. RealDigits extracts a list containing the digits or a real number, plus how many are to the left of the decimal point (which we throw away). Split divides a list into sublists for which all adjacent elements are the same. number = N[Pi, 200]; {First[#], Length[#]} & /@ Split[Sort[First[RealDigits[number]]]] {{0, 20}, {1, 19}, {2, 25}, {3, 20}, {4, 22}, {5, 20}, {6, 15}, {7, 12}, {8, 25}, {9, 22}} That was the fastest solution I found. Another possible solution, only half as fast, is: cntarray = Table[0, {10}]; (++cntarray[[#1 + 1]] & ) /@ First[RealDigits[number]]; Transpose[{Range[0, 9], cntarray}] I obtain the same Timing using Scan cntarray = Table[0, {10}]; Scan[++cntarray[[#1 + 1]] &, First[RealDigits[number]]]; Transpose[{Range[0, 9], cntarray}] David Park djmp at earthlink.net http://home.earthlink.net/~djmp/ > From: Domi [mailto:doud25 at caramail.com] To: mathgroup at smc.vnet.net > > Hello Mathematica experts out there, > > I want to determine the frequencies of the entries in a list of integers > > For example, the following piece of code seems to work with Pi: > pi = Join > [ {3}, ToExpression[Characters[StringDrop[ToString[N[Pi, 57]], {1, > 2}]]]] > Table[{i, Count[pi, i]}, {i, 0, 9}] > > {{0, 3}, {1, 5}, {2, 6}, {3, 9}, {4, 4}, {5, 6}, {6, 4}, {7, 5}, > {8, 6}, {9, 9}} > > Question: Is there a more elegant way to do that? > > Regards from Domi. > >