查找非分箱加权数据的频率

时间:2012-01-12 05:42:52

标签: wolfram-mathematica histogram bin

这是一个棘手的问题(或者至少我认为)。我需要创建一个直方图,但我没有数据及其频率,而是重复数据(即没有分箱)和每个数据的一些权重。

一个例子:

Angle  | Weight    
90   ....  3/10     
93   ....  2/10   
180  ....  2/10    
180  ....  1/10    
95   ....  2/10    

我想创建一个bin大小为10的直方图.y值应该是一个范围内角度的加权频率之和。我该怎么做?最好是Mathematica或伪代码......

3 个答案:

答案 0 :(得分:1)

由于预期的产出不会出现,我将采用Verbeia的解释。你可以使用这样的东西:

dat = {{90, 3/10}, {93, 1/5}, {180, 1/5}, {180, 1/10}, {95, 1/5}};

bars =
 Reap[
   Sow[#2, Floor[#, 10]] & @@@ dat,
   _,
   {#, Tr@#2} &
 ][[2]]

Graphics[
  Rectangle[{#, 0}, {# + 10, #2}] & @@@ bars,
  AspectRatio -> 1/GoldenRatio,
  Axes -> True,
  AxesOrigin -> {Min@bars[[All, 1]], 0}
]

Mathematica graphics

答案 1 :(得分:1)

在Mathematica 9中,您可以使用WeightedData函数执行此操作:

Histogram[WeightedData[{90, 93, 180, 180, 95}, {3/10, 2/10, 2/10, 1/10, 2/10}], {10}]

然后你应该得到一个像这样的图形:

Weighted Histogram

答案 2 :(得分:0)

我最近针对不同类型的问题做了类似的事情(按资产负债表大小加权)。

假设您的数据位于N * 2矩阵列表中,我会执行以下操作:

{numbers,weights} = {data[[All,1]], data[[All,2]]*10};

weightednumbers =       Flatten@ MapThread[
    Table[#1, {#2}] &, {numbers, Ceiling[weights]}];

然后使用Histogram在此转换后的数据上绘制直方图。

可能有其他方法,但这有效。

重要的一点是确保权重是整数,因此Table作为正确的迭代器。这可能需要将weights定义为data[[All,2]]*Min[data[[All,2]]