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

Wolfram mathematica 在mathematica中使用直方图时如何输出数据集,wolfram-mathematica,Wolfram Mathematica,在Mma中,直方图函数仅生成图形。我想知道如何才能得到数据集;有什么方便的内置功能吗 非常感谢。Mathematica V8中添加了HistogramList,以显示装箱和高度计算 HistogramList[a] 对于V7,您可以破解第三个参数以获取箱子和计数 Histogram[a, Automatic, (Print[{##}]; #2) &] 也许上网搜索也会有所帮助。这是我(2010年6月18日)对Mathematica新闻组comp.soft-sys.math.Math

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


非常感谢。

Mathematica V8中添加了HistogramList,以显示装箱和高度计算

HistogramList[a]

对于V7,您可以破解第三个参数以获取箱子和计数

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

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

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

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

编辑
要在任何仓位或计数操作后重新创建直方图,请按照下面Brett的建议进行操作。只需准备好垃圾箱并按如下方式计数:

bins = Union[ Flatten[res[[2, 1, 1, 1]]]];
counts = res[[2, 1, 1, 2]];
Histogram[data, {bins}, counts &]
我不确定垃圾箱是否保证按升序排列,因此您可能希望使用
deleteplicates
,而不是
Union
(哪种排序)


计数&
在这里是一个技巧。如“帮助”页面中所述,第三个位置的函数将获取一个箱子和计数列表,并返回一个高度列表。在这种情况下,它只会吞噬列表并返回计数。

如果您正在使用V7,并且您对使用此技巧无法使用内置的箱子高度规范(“计数”、“概率”、“概率密度”等)感到不安,那么您可以修改Sjord上面的答案,以按照自己的意愿返回标准化的箱子。例如,如果您想使用

data = RandomReal[NormalDistribution[0, 1], 200];
Histogram[data, Automatic, "Probability"]
你可以用

res = Reap[Histogram[data, Automatic, 
           (ret = #2/Length[data]; 
            Sow[{#1, ret}]; ret) &
      ]]
“概率密度”的模拟值为


有没有办法通过使用
BinCounts
函数在版本7中获得类似于
HistogramList[a]
的输出?+1,很高兴知道这一点。在
Histogram[a,Automatic,(Print[{{code}}}}}和]
生成数据之后,如果在我处理这些数据之后,如何以直方图形式再次绘制出来?@strong假设
bin
counts
包含数据,您应该能够使用类似
Histogram[data,{Union[bin]},counts&]
的东西。(未经测试,因为我面前没有Mathematica。)+1为历史gramlist。在我背后进入剧场的众多新v8功能之一。@Sjoerd还可以看看
SmoothKernelDistribution
SmoothHistogramDistribution
,以及
HistogramDistribution
,我喜欢你的。:)顺便说一句,在得到
{{-2,-(3/2)},{-(3/2),-1},{-1,-(1/2)},{-(1/2),0},{0,1/2},{1/2,1},{1,3/2,{3/2,2},{2,5/2,3},{3,7/2},{5,23,36,37,43,27,18,9,1,0,1,1,1}之后,如何再次绘制代码<代码>直方图[数据,{Union[bins]},计数&]
在我的mma v7中似乎不起作用。谢谢
res = Reap[Histogram[data, Automatic, 
           (binWidth = #1[[1]][[2]] - #1[[1]][[1]];
           ret = #2/(Length[data]*binWidth);
           Sow[{#1, ret}]; ret) &
     ]]