向量中的数字出现次数

时间:2014-07-02 10:06:17

标签: matlab numbers

我有以下向量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,而是在第一列中得到了两个?

5 个答案:

答案 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

中bin文件夹的位置
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));