在Mma中,直方图功能仅生成图形。我想知道如何获取数据集;这有什么方便的内置功能吗?
非常感谢。
答案 0 :(得分:12)
将HistogramList添加到Mathematica V8以显示分级和高度计算。
HistogramList[a]
对于V7,您可以破解第三个参数来获取垃圾箱和计数。
Histogram[a, Automatic, (Print[{##}]; #2) &]
答案 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) &]]
我觉得这个解决方案比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) &
]]