替换hist和histc的不鼓励实例

旧的直方图函数(,histc)

MATLAB的早期版本®使用histc函数是创建直方图和计算直方图库计数的主要方法。这些功能虽然适用于一般用途,但总体功能有限。的使用histc在新守则中,由于以下原因(除其他外)不鼓励:

  • 在使用要创建直方图,修改直方图的属性是困难的,需要重新计算整个直方图。

  • 的默认行为是使用10个箱子,不适合很多数据集。

  • 绘制标准化直方图需要手工计算。

  • histc行为不一致。

推荐直方图函数

柱状图,histcounts,离散化函数极大地提高了MATLAB中直方图创建和计算的能力,同时仍然提高了一致性和易用性。柱状图,histcounts,离散化为新代码推荐的直方图创建和计算函数。

特别值得注意的是下列变化改进histc:

  • 柱状图可以返回一个直方图对象。您可以使用该对象来修改直方图的属性。

  • 这两个柱状图histcounts具有自动装箱和标准化功能,内置几个常见选项。

  • histcounts主要的计算功能是什么柱状图。结果是函数具有一致的行为。

  • 离散化为确定每个元素的bin位置提供额外的选项和灵活性。

需要代码更新的差异

尽管有上述的改进,但仍有几个重要的改进差异在旧的和现在推荐的函数之间,这可能需要更新您的代码。这些表总结了函数之间的差异,并提供了更新代码的建议。

代码更新为

区别 旧的行为 新行为柱状图

输入矩阵

为输入矩阵的每一列创建柱状图,并在同一图中并排绘制柱状图。

= randn (100 2);嘘(A)

柱状图将输入矩阵视为单个高向量,并创建单个直方图。要绘制多个直方图,请为每一列数据创建不同的直方图对象。使用抓住命令在同一图中绘制直方图。

= randn (100 2);h1 = histogram(A(:,1),10) edges = h1. binedges;hold on h2 =直方图(A(:,2),edges)

上面的代码示例为每个直方图使用相同的bin边,但在某些情况下,最好设置BinWidth每个直方图的值都是相同的。另外,为了显示目的,设置FaceAlpha属性,因为这会影响重叠条的透明度。

本规范

接受本中心作为第二个输入。

柱状图接受本边缘作为第二个输入。

将bin中心转换为bin边缘以供使用柱状图,请参阅将Bin中心转换为Bin边缘

请注意

在箱子中心使用的情况下整数,例如嘘(三3),使用新的内置封装方法柱状图为整数。

直方图(“BinLimits”, [3 3],“BinMethod”,“整数”)

输出参数

返回作为输出参数的bin计数,也可以选择返回作为第二个输出参数的bin中心。

1 = randn (100);[N,中心]= hist(A)

柱状图返回一个柱状图对象作为输出参数。对象包含许多感兴趣的属性(bin计数、bin边等)。您可以通过更改其属性值来修改直方图的各个方面。有关更多信息,请参见柱状图

1 = randn (100);h =直方图(A);N = h。值Edges = h.BinEdges

请注意

要计算箱数(不绘制柱状图),请替换[N,中心]= hist(A)[N,边缘]= histcounts (A, nbins)

默认箱数

默认使用10个箱子。

这两个柱状图histcounts默认情况下使用自动装箱算法。箱子的数量由输入数据的大小和分布决定。

1 = randn (100);直方图(A) histcounts (A)

本限制

使用最小和最大有限数据值来确定图中第一个和最后一个条的左边缘和右边缘。分别包含在第一个和最后一个bin中。

如果BinLimits是不是设定,那么柱状图使用基于(但不完全等于)最小和最大有限数据值的rational bin限制。柱状图忽略了值,除非bin边显式指定作为垃圾桶边缘。

重现重现…的结果嘘(A)对于有限数据(no值),使用10个容器并显式设置BinLimits最小和最大的数据值。

一个=兰迪(5100 1);直方图(10“BinLimits”, [min (A) max (A)])

代码更新为histc

区别 旧的行为histc 新行为histcounts
输入矩阵

histc计算每列输入数据的箱数。输入矩阵的大小——- - - - - -n,histc返回容器大小计数的矩阵长度(边缘)——- - - - - -n

10 A = randn (100);边缘= 4:4;N = histc(边缘)

histcounts将输入矩阵视为单个高向量,并计算整个矩阵的箱数。

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);结束

如果由于矩阵中有大量列而造成性能问题,则考虑继续使用histc对于按列计算的bin计数。

最后一个容器中包含的值

histc包括一个元素(我)在最后一个箱子里(我)= =边缘(结束)。输出,N为向量长度(边缘)元素包含的箱子计数。落在箱子外面的价值不计算在内。

histcounts包括一个元素(我)在最后一个箱子里(end-1) <= A(i) <= edges(end)。换句话说,histcounts结合最后两个箱子histc放进一个最后的箱子里。输出,N为向量长度(边缘)1元素包含的箱子计数。如果指定了bin的边,那么位于bin外面的值将不被计算。否则,histcounts自动确定用于包含所有数据的适当bin边。

一个= 1:4;N = histcounts(A) N = histcounts(A,edges)

最后一个垃圾箱histc主要用于计数整数。来进行这个整数计数histcounts,可以使用“整数”本方法:

N = histcounts (“BinMethod”,“整数”);
输出参数

histc返回bin计数作为输出参数,也可以选择返回bin索引作为第二个输出参数。

1 = randn(15日);边缘= 4:4;[N,本]= histc (A,边缘)
  • 对于bin计数的计算像N = histc(边缘)[N,本]= histc (A,边缘),使用histcounts。的histcounts函数返回作为输出参数的bin计数,也可以选择返回bin边作为第二个输出,或者返回bin索引作为第三个输出。

    1 = randn(15日);[N,边缘,本]= histcounts (A)
  • 对于bin位置的计算,如(~,本)= histc (A,边缘),使用离散化。的离散化函数提供了确定每个元素的bin位置的其他选项。

    1 = randn(15日);边缘= 4:4;宾=离散化(A,边缘)

将Bin中心转换为Bin边缘

函数接受bin中心,而柱状图函数接受bin边。更新要使用的代码柱状图,您可能需要斌中心转换成箱的边缘再现与取得的成果

例如,指定使用的bin中心。这些箱子的宽度是一样的。

A = [-9 -6 -5 -2 0 1 3 3 4 7];中心= [-7.5 -2.5 2.5 7.5];嘘(中心)

为了将bin中心转换为bin边,计算连续值之间的中点中心。的结果适用于均匀和非均匀料仓宽度。

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

现在,使用柱状图与bin的边缘。

直方图(边缘)