在mathematica中使用直方图时如何输出数据集

时间:2011-03-08 22:33:38

标签: wolfram-mathematica

在Mma中,直方图功能仅生成图形。我想知道如何获取数据集;这有什么方便的内置功能吗?

非常感谢。

3 个答案:

答案 0 :(得分:12)

将HistogramList添加到Mathematica V8以显示分级和高度计算。

HistogramList[a]

enter image description here

对于V7,您可以破解第三个参数来获取垃圾箱和计数。

Histogram[a, Automatic, (Print[{##}]; #2) &]

enter image description here

答案 1 :(得分:3)

也许一些互联网搜索也会有所帮助。这是我对Mathematica新闻组comp.soft-sys.math.mathematica中类似问题的回答(2010年6月18日):

data = RandomReal[NormalDistribution[0, 1], 200];
res = Reap[Histogram[data, Automatic, (Sow[{#1, #2}]; #2) &]]

enter image description here

我觉得这个解决方案比Brett稍好一些,因为它以一种易于使用的格式返回数据。

修改
要在任何bin或count操作之后重新创建直方图,您将按照Brett下面的建议进行操作。只需准备好bin和count,如下所示:

bins = Union[ Flatten[res[[2, 1, 1, 1]]]];
counts = res[[2, 1, 1, 2]];
Histogram[data, {bins}, counts &]

我不确定这些垃圾箱是否保证按升序排列,因此您可能不想使用Union(排序),而是使用DeleteDuplicates

count &就是一招。如帮助页面中所述,第三个位置的函数应该采用bin和count列表并返回高度列表。在这种情况下,它只是吞噬列表并返回计数。

答案 2 :(得分:2)

如果您正在使用V7,并且您对使用此技巧感到不安,则无法使用内置的bin高度规范(“Count”,“Probability”,“ProbabilityDensity”等),您可以修改Sjord上面给出的回答箱按照你想要的标准化。例如,如果您想要使用

的箱高
data = RandomReal[NormalDistribution[0, 1], 200];
Histogram[data, Automatic, "Probability"]

你可以改为使用

res = Reap[Histogram[data, Automatic, 
           (ret = #2/Length[data]; 
            Sow[{#1, ret}]; ret) &
      ]]

“ProbabilityDensity”的模拟是

res = Reap[Histogram[data, Automatic, 
           (binWidth = #1[[1]][[2]] - #1[[1]][[1]];
           ret = #2/(Length[data]*binWidth);
           Sow[{#1, ret}]; ret) &
     ]]