我有一个向量

A = [ 1 1 1 2 2 3 6 8 9 9 ]

我想编写一个循环来计算我选择的范围内向量中值的频率,这将包括频率为 0 的值
例如,如果我选择 1:9 的范围,我的结果将是
3 2 1 0 0 1 0 1 2

如果我选择 1:11 结果将是
3 2 1 0 0 1 0 1 2 0 0

这可能吗?同样理想情况下,我必须对巨大的矩阵和向量执行此操作,因此将不胜感激计算此方法的快速方法。

最佳答案

这是 histcounts 的替代建议,它在 Matlab 2015b 上似乎快 8 倍:

A = [ 1 1 1 2 2 3 6 8 9 9 ];
maxRange = 11;
N = accumarray(A(:), 1, [maxRange,1])';
N =
     3     2     1     0     0     1     0     1     2     0     0

速度对比:
K>> tic; for i = 1:100000, N1 = accumarray(A(:), 1, [maxRange,1])'; end; toc;
Elapsed time is 0.537597 seconds.

K>> tic; for i = 1:100000, N2 = histcounts(A,1:maxRange+1); end; toc;
Elapsed time is 4.333394 seconds.

K>> isequal(N1, N2)
ans =
     1

关于performance - 计算包含 0 的矩阵值的频率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37104836/

10-11 16:01