在Matlab中使用hist来计算出现次数

时间:2017-03-23 12:22:01

标签: arrays matlab matrix histogram

我正在使用hist来计算Matlab中矩阵中值的出现次数。

我认为我使用它是错误的,因为它给了我完全奇怪的结果。你能帮我理解发生了什么吗?

当我运行这段代码时,我会根据需要获得countsB

rng default; 
B=randi([0,3],10,1);
idxB=unique(B);
countsB=(hist(B,idxB))';

即。

B=[3;3;0;3;2;0;1;2;3;3];
idxB=[0;1;2;3];
countsB=[2;1;2;5];

当我运行另一段代码时,我得到countsA

的错误结果
A=ones(524288,1)*3418;
idxA=unique(A);
countsA=(hist(A,idxA))';

idxA=3148;
countsA=[zeros(1709,1); 524288; zeros(1708,1)];

我做错了什么?

3 个答案:

答案 0 :(得分:3)

idxA是一个标量,表示此上下文中的二进制数。 将idxA设置为矢量,例如[0,3418]会给你一个以0和3418为中心的bin的组合,类似于你用idxB得到的,也是一个向量

答案 1 :(得分:3)

要添加其他答案:您可以使用显式总和替换hist

idxA = unique(A);
countsA = sum(bsxfun(@eq, A(:), idxA(:).'), 1);

答案 2 :(得分:2)

我认为它与:

有关
N = HIST(Y,M), where M is a scalar, uses M bins.

我想你会认为它会这样做:

N = HIST(Y,X), where X is a vector, returns the distribution of Y
among bins with centers specified by X.

换句话说,在第一种情况下,matlab假设你要求3418个箱子