我有以下向量A = [9 8 8 8 10 10 2 7 9 2]
,我想计算1-10中每个数字的出现次数。所以我使用matlab的hist命令:
occ = hist(A)
但是我得到了以下结果:
res = [2 0 0 0 0 0 1 3 2 2]
为什么在第二列向量中没有2,而是在第一列中得到了两个?
答案 0 :(得分:2)
这是你必须要做的。
B=hist(A,1:10);
例如,
A =
9 8 8 8 10 10 2 7 9 2
运行上述命令后输出
B =
0 2 0 0 0 0 1 3 2 2
请查看hist
命令的帮助以获取更多信息
答案 1 :(得分:2)
您正在使用的hist
功能版本的bin中心不在您认为的位置。试试这个,看看:
[occ, bins] = hist(A)
bins =
2.400000000000000
3.200000000000000
4.000000000000000
4.800000000000001
5.600000000000001
6.400000000000000
7.200000000000001
8.000000000000000
8.800000000000001
9.600000000000000
要实现您的目标,请手动指定bin中心:
occ = hist(A, 1:10)
答案 2 :(得分:1)
使用双输出形式的hist揭示了发生了什么:
[occ, x] = hist(A)
这将返回x
:
x = [2.4 3.2 4.0 4.8 5.6 6.4 7.2 8.0 8.8 9.6]
Naveen's answer说明了如何手动设置bin中心。
答案 3 :(得分:1)
因为hist
以自然的,以数据为导向的方式选择bin中心,如下所示:
MA = max(A);
mA = min(A);
offset = (MA-mA)/2/nBins;
binCenters = linspace(mA+offset, MA-offset, nBins);
nBins
个数量,默认为10.因此,对于默认调用,您将获得bin中心
x = [2.4 3.2 4.0 4.8 5.6 6.4 7.2 8.0 8.8 9.6]
如ojdo所示。要获得所需的垃圾箱,您必须使用
B = hist(A, 1:10);
或
C = histc(A, [-inf (1:9)+0.5 +inf])
如果你想要避免这种混乱。
答案 4 :(得分:1)
另一种可能性,对于大A
来说似乎更快:
res = sum(bsxfun(@eq, A(:), 1:10));