histcounts
直方图 bin 计数
语法
说明
仅对 N
= histcounts(C
,Categories
)C
中其值等于由 Categories
指定的类别子集的元素进行计数。
[
还使用分类数组的任一上述语法,返回对应于 N
,Categories
] = histcounts(___)N
中每个计数的类别。
[___] = histcounts(___,
使用一个或多个名称-值参量指定其他参数。例如,您可以将 Name,Value
)BinWidth
指定为一个标量来调整数值数据的 bin 的宽度。
示例
bin 计数和 bin 边界
将 100 个随机值分布到多个 bin 内。histcounts
自动选择合适的 bin 宽度以显示数据的基本分布。
X = randn(100,1); [N,edges] = histcounts(X)
N = 1×7
2 17 28 32 16 3 2
edges = 1×8
-3 -2 -1 0 1 2 3 4
指定 bin 数
将 10 个随机数分布到 6 个等间距 bin 内。
X = [2 3 5 7 11 13 17 19 23 29]; [N,edges] = histcounts(X,6)
N = 1×6
2 2 2 2 1 1
edges = 1×7
0 4.9000 9.8000 14.7000 19.6000 24.5000 29.4000
指定 bin 边界
将 1,000 个随机数分布到多个 bin 内。通过向量定义 bin 边界,其中第一个元素是第一个 bin 的左边界,而最后一个元素是最后一个 bin 的右边界。
X = randn(1000,1); edges = [-5 -4 -2 -1 -0.5 0 0.5 1 2 4 5]; N = histcounts(X,edges)
N = 1×10
0 24 149 142 195 200 154 111 25 0
归一化的 bin 计数
将小于 100 的所有质数分布到多个 bin 内。将 'Normalization'
指定为 'probability'
以对 bin 计数进行归一化,从而 sum(N)
为 1
。即,每个 bin 计数代表观测值属于该 bin 的可能性。
X = primes(100); [N,edges] = histcounts(X, 'Normalization', 'probability')
N = 1×4
0.4000 0.2800 0.2800 0.0400
edges = 1×5
0 30 60 90 120
确定 bin 放置
将介于 -5 和 5 之间的 100 个随机整数分布到多个 bin 内,并将 'BinMethod'
指定为 'integers'
以使用以整数为中心的单位宽度 bin。指定 histcounts
的第三个输出以返回代表数据 bin 索引的向量。
X = randi([-5,5],100,1); [N,edges,bin] = histcounts(X,'BinMethod','integers');
通过计算数字 3
在 bin 索引向量 bin
中的出现次数求第三个 bin 的 bin 计数。结果与 N(3)
相同。
count = nnz(bin==3)
count = 8
分类 bin 计数
创建一个表示投票的分类向量。该向量中的类别是 'yes'
、'no'
或 'undecided'
。
A = [0 0 1 1 1 0 0 0 0 NaN NaN 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 1]; C = categorical(A,[1 0 NaN],{'yes','no','undecided'})
C = 1x27 categorical
no no yes yes yes no no no no undecided undecided yes no no no yes no yes no yes no no no yes yes yes yes
确定每个类别中的元素数量。
[N,Categories] = histcounts(C)
N = 1×3
11 14 2
Categories = 1x3 cell
{'yes'} {'no'} {'undecided'}
输入参数
X
— 要分布到各 bin 的数据
向量 | 矩阵 | 多维数组
要分布到各 bin 的数据,指定为向量、矩阵或多维数组。如果 X
不是向量,则 histcounts
将它视作单列向量 X(:)
。
histcounts
忽略所有的 NaN
值。同样,histcounts
忽略 Inf
和 -Inf
值,除非 bin 边界将 Inf
或 -Inf
显式指定为 bin 边界。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| datetime
| duration
C
— 分类数据
分类数组
分类数据,指定为分类数组。histcounts
将忽略未定义的分类值。
数据类型: categorical
nbins
— bin 数量
正整数
bin 数量,指定为正整数。如果不指定 nbins
,则 histcounts
基于 X
中的值自动计算将使用多少个 bin。
示例: [N,edges] = histcounts(X,15)
使用 15 个 bin。
edges
— bin 边界
向量
bin 边界,指定为向量。第一个向量元素指定第一个 bin 的左边界。最后一个元素指定最后一个 bin 的右边界。仅最后一个 bin 包含右边界。
对于日期时间和持续时间数据,edges
必须是单调递增顺序的日期时间或持续时间向量。
Categories
— 计数中包含的类别
所有类别 (默认) | 字符串向量 | 字符向量元胞向量 | pattern
标量 | 分类向量
计数中包含的类别,指定为字符串向量、字符向量的元胞向量、pattern
标量或分类向量。默认情况下,histcounts
对分类数组 C
中的每个类别使用一个 bin,而使用 Categories
可指定类别的唯一子集。
示例: h = histcounts(C,["Large","Small"])
只对类别 Large
和 Small
中的分类数据进行计数。
示例: h = histcounts(C,"Y" + wildcardPattern)
对名称以字母 Y
开头的所有类别中的分类数据进行计数。
数据类型: string
| cell
| pattern
| categorical
名称-值参数
将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参量名称,Value
是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: [N,edges] = histcounts(X,'Normalization','probability')
对 N
中的 bin 计数进行归一化,这样 sum(N)
为 1。
BinWidth
— bin 的宽度
正标量
bin 的宽度,指定为正标量。如果指定 BinWidth
,则 histcounts
最多可以使用 65,536(即 216)个 bin。如果指定的 bin 宽度需要多个 bin,则 histcounts
使用与最大 bin 数对应的较大的 bin 宽度。
对于
datetime
和duration
数据,BinWidth
可以是标量持续时间或日历持续时间。如果用
BinMethod
、NumBins
或BinEdges
指定BinWidth
,则histcounts
仅采用最后一个参数。此选项不适用于分类数据。
示例:
使用宽度为 5 的 bin。histcounts
(X,'BinWidth',5)
BinEdges
— bin 的边界
数值向量
bin 的边界,指定为数值向量。第一个元素指定第一个 bin 的左边界。最后一个元素指定最后一个 bin 的右边界。仅最后一个 bin 包含右边界。
如果不指定 bin 边界,则 histcounts
自动确定 bin 边界。
如果用
BinMethod
、BinWidth
、NumBins
或BinLimits
指定BinEdges
,则histcounts
只采用BinEdges
且必须最后指定BinEdges
。此选项不适用于分类数据。
BinLimits
— bin 范围
二元素向量
bin 范围,指定为二元素向量 [bmin,bmax]
。第一个元素指示第一个 bin 边界。第二个元素指示最后一个 bin 边界。
此选项仅使用在 bin 范围 X>=bmin & X<=bmax
(包含这两个边界值)内的数据进行计算。
此选项不适用于分类数据。
示例:
仅包括 histcounts
(X,'BinLimits',[1,10])X
中介于 1
与 10
(含二者)之间的值。
BinMethod
— 分 bin 算法
'auto'
(默认) | 'scott'
| 'fd'
| 'integers'
| 'sturges'
| 'sqrt'
| ...
分 bin 算法,指定为此表中的一个值。
值 | 描述 |
---|---|
| 默认的 |
| 如果数据接近正态分布,则斯科特规则最佳。该规则也适用于大多数的其他分布。它使用 bin 宽度 |
| 弗里德曼-迪亚科尼斯规则对数据中的离群值不太敏感,可能更适用于重尾分布的数据。它使用 bin 宽度 |
| 整数规则对整数数据有用,因为它为每个整数创建一个 bin。它使用 bin 宽度 1 并将 bin 边界放在整数的中间。 为避免无意间创建太多 bin,可以使用该规则创建 65536 (216) 个 bin 的限制。如果数据范围大于 65536,则整数规则改用更宽的 bin。
|
| 斯特吉斯规则因其简单性而广受欢迎。它将 bin 数量选择为 |
| 平方根规则是广泛用于其他软件包。它将 bin 数量选择为 |
histcounts
稍微调整 bin 的数目,使 bin 边界落在“合适”的数字上,而不是机械遵循这些精确的公式。
对于 datetime
或 duration
数据,将分 bin 算法指定为下列时间单位之一。
值 | 描述 | 数据类型 |
---|---|---|
"second" | 每个 bin 是 1 秒。 | datetime 和 duration |
"minute" | 每个 bin 是 1 分钟。 | datetime 和 duration |
"hour" | 每个 bin 是 1 小时。 | datetime 和 duration |
"day" | 每个 bin 表示 1 个日历日。此值将夏令时变化考虑在内。 | datetime 和 duration |
"week" | 每个 bin 是 1 个日历周。 | 仅限 datetime |
"month" | 每个 bin 是 1 个日历月。 | 仅限 datetime |
"quarter" | 每个 bin 是 1 个日历季度。 | 仅限 datetime |
"year" | 每个 bin 表示 1 个日历年。此值将闰日考虑在内。 | datetime 和 duration |
"decade" | 每个 bin 是 1 个十年(10 个日历年)。 | 仅限 datetime |
"century" | 每个 bin 是 1 个世纪(100 个日历年)。 | 仅限 datetime |
如果为
datetime
或duration
数据指定BinMethod
,则histcounts
最多可以使用 65,536(即 216)个 bin。如果指定的 bin 持续时间需要多个 bin,则histcounts
使用与最大 bin 数对应的较大的 bin 宽度。如果指定
BinLimits
、NumBins
、BinEdges
或BinWidth
,则BinMethod
设置为'manual'
。如果用
BinWidth
、NumBins
或BinEdges
指定BinMethod
,则histcounts
仅采用最后一个参数。此选项不适用于分类数据。
示例:
将 bin 以整数为中心放置。histcounts
(X,'BinMethod','integers')
Normalization
— 归一化类型
'count'
(默认) | 'probability'
| 'percentage'
| 'countdensity'
| 'cumcount'
| 'pdf'
| 'cdf'
归一化类型,指定为此表中的一个值。对于每个 bin i
:
是 bin 的值。
是 bin 中的元素数目。
是 bin 的宽度。
是输入数据中的元素数目。此值可以大于分 bin 数据元素数,前提是数据中包含缺失值,例如
NaN
,或者某些数据位于 bin 范围外。
值 | bin 值 | 注释 |
---|---|---|
'count' (默认值) |
|
|
'probability' |
|
|
'percentage' |
|
|
'countdensity' |
|
|
'cumcount' |
|
|
'pdf' |
|
|
'cdf' |
|
|
示例:
使用概率密度函数估计值对数据进行分 bin。histcounts
(X,'Normalization','pdf')
NumBins
— bin 数量
正整数
bin 数量,指定为正整数。如果不指定 NumBins
,则 histcounts
基于输入数据自动计算将使用多少个 bin。
如果用
BinMethod
、BinWidth
或BinEdges
指定NumBins
,则histcounts
仅采用最后一个参数。此选项不适用于分类数据。
输出参量
N
— bin 计数
行向量
bin 计数,以行向量的形式返回。
edges
— bin 边界
向量
bin 边界,以向量形式返回。第一个元素是第一个 bin 的左边界。最后一个元素是最后一个 bin 的右边界。
bin
— bin 索引
数组
bin 索引,以大小与 X
相同的数组形式返回。bin
中的每个元素说明哪些编号的 bin 包含 X
中的对应元素。
bin
中的 0
值用于指明不属于任何 bin 的元素(例如 NaN
值)。
Categories
— 计数中包含的类别
字符向量元胞向量
计数中包含的类别,以字符向量元胞向量形式返回。Categories
包含 C
中对应于 N
中每个计数的类别。
提示
histcounts
的行为与discretize
函数的行为类似。使用histcounts
查找每个 bin 中的元素数量。另一方面,使用discretize
可查找每个元素所属的 bin(不计数)。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
用法说明和限制:
不支持某些输入选项。允许使用的选项包括:
'BinWidth'
'BinLimits'
'Normalization'
'BinMethod'
-'auto'
和'scott'
是相同的 bin 方法。不支持'fd'
bin 方法。
Categories
输入参量不支持模式表达式。
有关详细信息,请参阅 tall 数组。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
代码生成不支持对此函数使用稀疏矩阵输入。
如果您不提供 bin 边界,代码生成可能需要可变大小数组和动态内存分配。
Categories
输入参量不支持模式表达式。Normalization
名称-值参量不支持'percentage'
选项。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
代码生成不支持对此函数使用稀疏矩阵输入。
如果您不提供 bin 边界,代码生成可能需要可变大小数组和动态内存分配。
Categories
输入参量不支持模式表达式。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
版本历史记录
在 R2014b 中推出R2023b: 使用百分比进行归一化
通过将 Normalization
名称-值参量指定为 'percentage'
,可以将直方图值归一化为百分比。
R2023a: 改进了使用少量数值和逻辑值输入数据时的性能
由于输入解析更快,histcounts
函数在使用数值和逻辑值数据时的性能得到了改进。输入解析在计算时间中的占比越大,性能改进越显著。当要分布到各 bin 的数据的大小小于 2000 个元素时,就会出现这种情况。
例如,以下代码计算一个包含 1000 个元素的向量的直方图 bin 计数。该代码比上一版本大约快 3 倍。
function timingHistcounts X = rand(1,1000); for k = 1:3e3 histcounts(X,"BinMethod","auto"); end end
大致的执行时间是:
R2022b:0.62 秒
R2023a:0.21 秒
代码是在运行 Windows® 10 的 Intel® Xeon® CPU E5-1650 v4 @ 3.60 GHz 测试系统上使用 timeit
函数进行计时的。
timeit(@timingHistcounts)
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)