嘘
,histc
)MATLAB的早期版本®使用嘘
和histc
作为创建直方图和计算直方图bin计数的主要方法。这些功能虽然适用于某些通用目的,但总体功能有限。的使用嘘
和histc
在新代码中是不鼓励的原因(包括其他):
在使用嘘
要创建一个直方图,修改直方图的属性是困难的,需要重新计算整个直方图。
的默认行为嘘
是使用10个箱子,这并不适合很多数据集。
绘制标准化直方图需要手工计算。
嘘
和histc
没有一致的行为。
的柱状图
,histcounts
,离散化
函数极大地提高了MATLAB中直方图创建和计算的能力,同时仍然促进了一致性和易用性。柱状图
,histcounts
,离散化
为新代码推荐的直方图创建和计算函数。
特别值得注意的是下列变化改进在嘘
和histc
:
柱状图
可以返回直方图对象。可以使用该对象修改直方图的属性。
这两个柱状图
和histcounts
具有自动分类和规范化功能,内置几个常见选项。
histcounts
主要的计算功能是什么柱状图
.结果是这些函数具有一致的行为。
离散化
为确定每个元素的容器位置提供额外的选项和灵活性。
尽管有上述改进,但仍有几个重要的地方差异旧的和现在推荐的函数之间,这可能需要更新您的代码。这些表总结了函数之间的差异,并提供了更新代码的建议。
代码更新为嘘
区别 | 旧的行为嘘 |
新行为柱状图 |
---|---|---|
输入矩阵 |
= randn (100 2);嘘(A) |
= randn (100 2);h1 = histogram(A(: 1),10) edges = h1. binedges;hold on h2 = histogram(A(:,2),edges) 上面的代码示例为每个直方图使用相同的箱边,但在某些情况下,最好设置 |
本规范 |
|
将仓中心转换为仓边以供使用 请注意在垃圾箱使用的情况下 直方图(“BinLimits”,[3 3],“BinMethod”,“整数”) |
输出参数 |
1 = randn (100);[N,中心]= hist(A) |
1 = randn (100);h =直方图(A);N = h.Values Edges = h.BinEdges 请注意要计算箱数(不绘制直方图),请替换 |
默认箱数 |
|
这两个 1 = randn (100);直方图(A) histcounts (A) |
本限制 |
|
如果 再现…的结果 一个=兰迪(5100 1);直方图(10“BinLimits”,[min (A) max (A)]) |
代码更新为histc
区别 | 旧的行为histc |
新行为histcounts |
---|---|---|
输入矩阵 |
10 A = randn (100);边缘= 4:4;N = histc(边缘) |
10 A = randn (100);边缘= 4:4;N = histcounts(边缘) 使用for循环计算每列上的仓位计数。 10 A = randn (100);nbins = 10;N = 0 (nbins, size(A,2));k = 1:尺寸(2)N (:, k) = histcounts ((:, k), nbins);结束 如果由于矩阵中有大量的列而造成性能问题,那么可以考虑继续使用 |
最后一个容器中包含的值 |
|
一个= 1:4;[1 2 2.5 3] N = histcounts(A) N = histcounts(A,edges) 最后一个箱子 N = histcounts(“BinMethod”,“整数”); |
输出参数 |
1 = randn(15日);边缘= 4:4;[N,本]= histc (A,边缘) |
|
的嘘
函数接受bin中心,而柱状图
函数接受bin边。要更新使用的代码柱状图
,您可能需要将箱子中心转换为箱子边缘,以再现使用嘘
.
例如,指定bin中心使用嘘
.这些箱子的宽度相同。
A = [-9 -6 -5 -2 0 1 3 3 4 7];中心= [-7.5 -2.5 2.5 7.5];嘘(中心)
要将仓中心转换为仓边,请计算中连续值之间的中点中心
.这种方法再现了……的结果嘘
适用于均匀和非均匀的仓宽。
d = diff(中心)/ 2;边缘=[中心(1)- d(1)中心(1:end-1) + d,中心(结束)+ d(结束)];
的嘘
函数包括落在每个容器右边缘的值(第一个容器包括两个边缘),然而柱状图
包括落在每个容器左边缘的值(最后一个容器包括这两条边)。稍微移动箱子边以获得相同的箱子计数嘘
.
边边(2:结束)=(2:结束)+ eps(边缘(2:结束)
边缘=1×5-10.0000 -5.0000 0.0000 5.0000 10.0000
现在,使用柱状图
箱边。
直方图(边缘)