我有一个向量
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/