Re: Re: Weighted histogram

*To*: mathgroup at smc.vnet.net*Subject*: [mg62321] Re: [mg62287] Re: Weighted histogram*From*: ggroup at sarj.ca*Date*: Sat, 19 Nov 2005 23:19:13 -0500 (EST)*References*: <dliv00$g1b$1@smc.vnet.net><dlkcct$pr0$1@smc.vnet.net> <200511191054.FAA16469@smc.vnet.net> <1051079141.20051119132905@aggarwal.ca>*Reply-to*: ggroup at sarj.ca*Sender*: owner-wri-mathgroup at wolfram.com

On Saturday, November 19, 2005 at 1:29 PM, I wrote: > On Saturday, November 19, 2005 at 05:54 GMT -0500, Kalymereau wrote: >> It is possible to construct a binning and then to fill each bin by the >> corresponding values in a ponderated by the weights in w. But the tests >> I made in this direction were very slow for large lists, and I would >> like something more natural. >> It seems to me to be a very basic problem of data analysis, any other >> idea ? > Well, not really. The following probably won't win any speed awards, > but it isn't outrageous (about 0.75 minute for 10^6 elements here). > Needs["Graphics`Graphics`"]; > n = 10; > m = 10; > a = Table[Random[Real, m], {n}]; > w = Table[Random[], {n}]; > aw = Transpose[{a, w}]; > bins = Table[{i, i + 1}, {i, 0, m - 1}]; > Function[x, > { > tmp = Select[aw, x[[1]] <= #[[1]] < x[[2]] &]; > aw = Complement[aw, tmp]; > Total[tmp[[All, 2]]], > Mean[x] > } > ] /@ bins // BarChart > Clear[tmp]; The following, though based on the same idea, is significantly faster: Needs["Graphics`Graphics`"]; Needs["Statistics`DataManipulation`"]; n = 10^6; m = 10; a = Table[Random[Real, m], {n}]; w = Table[Random[], {n}]; Module[{aw, dat, tmp, bins, dbin = 1}, aw = Sort[Transpose[{a, w}]]; bins = Table[i, {i, dbin, m, dbin}]; dat = Function[x, tmp = TakeWhile[aw, #[[1]] < x &]; aw = Drop[aw, Length[tmp]]; Total[tmp[[All, 2]]] ] /@ bins; Histogram[ dat, FrequencyData -> True, HistogramCategories -> Join[{0}, bins], HistogramScale -> 1] ] // Timing

**References**:**Re: Weighted histogram***From:*kalymereau@yahoo.fr