Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB-等大小直方图和直方图重叠_Matlab_Histogram - Fatal编程技术网

MATLAB-等大小直方图和直方图重叠

MATLAB-等大小直方图和直方图重叠,matlab,histogram,Matlab,Histogram,我多次遇到的一个问题是,想要获取两个相似的数据集,并从它们创建直方图,其中的数据箱是相同的,以便轻松计算直方图重叠之类的内容 您可以使用 但是,没有一种明显的方法(据我所知)可以使多个不同数据集的存储箱大小相等。如果你还记得,当我开始寻找不同的人,他们似乎有相同的问题,但没有好的解决办法 正确、简单的方法 正如horchler所指出的,这可以通过使用histc(它可以定义您的仓位向量)或将直方图输入向量化到hist中轻松实现 错误的,愚蠢的方式 我在下面留下来提醒其他人,即使是愚蠢的问题也能得到

我多次遇到的一个问题是,想要获取两个相似的数据集,并从它们创建直方图,其中的数据箱是相同的,以便轻松计算直方图重叠之类的内容

您可以使用

但是,没有一种明显的方法(据我所知)可以使多个不同数据集的存储箱大小相等。如果你还记得,当我开始寻找不同的人,他们似乎有相同的问题,但没有好的解决办法

正确、简单的方法 正如horchler所指出的,这可以通过使用
histc
(它可以定义您的仓位向量)或将直方图输入向量化到
hist
中轻松实现

错误的,愚蠢的方式 我在下面留下来提醒其他人,即使是愚蠢的问题也能得到有价值的答案

我使用以下方法已经有一段时间了,所以我认为它可能对其他人有用(或者,有人可以很快指出正确的方法!)

一般方法依赖于这样一个事实,即
MATLAB
hist
函数定义了样本中最大值和最小值之间的等间距箱子数。因此,如果将开始(最小)和结束(最大)值附加到各种样本,即所有感兴趣样本的最小值和最大值,这将强制所有数据集的直方图范围相等。然后可以截断第一个和最后一个值以重新创建原始数据

例如,创建以下数据集

A = randn(1,2000)+7
B = randn(1,2000)+9

[counts_A, bins_A] = hist(A, 500);
[counts_B, bins_B] = hist(B, 500);
对于我的特定数据集,我得到以下结果

 bins_A(1)   % 3.8127  (this is also min(A) ) 
 bins_A(500) % 10.3081 (this is also max(A) )
 bins_B(1)   % 5.6310  (this is also min(B) )
 bins_B(500) % 13.0254 (this is also max(B) )
要创建相等的箱子,您只需首先定义一个最小值和最大值,该值略小于这两个范围

topval = max([max(A) max(B)])+0.05;
bottomval = min([min(A) min(B)])-0.05;
0.05
的加减法基于对值范围的了解-您不希望额外的bin太远或太接近实际范围。也就是说,在本例中,通过使用关节最小/最大值,该代码将在不考虑生成的A和B值的情况下工作

现在,我们使用重新创建柱状图计数和箱子(注意,额外的2个箱子用于新的最大值和最小值)

最后,截断第一个和最后一个bin和value条目,以便准确地重新创建原始样本

bins_A = bins_Ae(2:501)
bins_B = bins_Ae(2:501)
counts_A = counts_Ae(2:501)
counts_B = counts_Be(2:501)
现在

由此,您可以轻松地再次绘制两个直方图

bar([bins_A;bins_B]', [counts_A;counts_B]')
也可以轻松地绘制直方图重叠

bar(bins_A,(counts_A+counts_B)-(abs(counts_A-counts_B)))

你不是在描述吗<代码>历史记录基于
历史记录
。此外,您还可以使用带有数据列的
hist
对其进行矢量化,例如
hist(rand(1e3,3))
。我的意思是,如果您喜欢简单、快速和稳健的解决方案,那么当您可以花费更多的精力和时间与可能引入偏差的启发式方法结合时,谁会想要这样呢!?
bins_A(1)     % 3.7655
bins_A(500)   % 13.0735
bins_B(1)     % 3.7655
bins_B(500)   % 13.0735
bar([bins_A;bins_B]', [counts_A;counts_B]')
bar(bins_A,(counts_A+counts_B)-(abs(counts_A-counts_B)))