Matlab函数accumarray的用法
碰到accumarray 这个函数是在Steve的文章[1 ]中。
这是一个很灵活的build-in函数,所以是没有m文件,看不到实现代码的。
开始理解起来比较拗,看了看例子知道什么意思了。
Matlab的Help [2 ]里这么说:
- A =
- 1 % subs(1)==1,所以,A(1) = val(1)。
- 6 % subs(2)==subs(4)==2,所以,A(2)=val(2)+val(4)
- 0 % subs中没有数值是3的值,也就是说A(3)上不累加任何数值
- % val(3)对应的subs(3)==4,所以val(3)累加到A(4)上去了
- 8 % subs(3)==subs(5)==4,所以,A(4)=val(3)+val(5)
Steve中用accumarray实现了一个从坐标对儿中统计位置的功能:
[c-sharp]view plaincopy
- pairs = [...
- 1 3; 1 2;
- 2 1; 2 4;
- 3 1; 3 4;
- 4 2; 4 3;
- 5 6; 5 7;
- 6 5; 6 8;
- 7 5; 7 8; 7 9;
- 8 6; 8 7; 8 10;
- 9 7; 9 10;
- 10 8; 10 9]
- A = accumarray(pairs, 1)
- 结果:
- A =
- 0 1 1 0 0 0 0 0 0 0
- 1 0 0 1 0 0 0 0 0 0
- 1 0 0 1 0 0 0 0 0 0
- 0 1 1 0 0 0 0 0 0 0
- 0 0 0 0 0 1 1 0 0 0
- 0 0 0 0 1 0 0 1 0 0
- 0 0 0 0 1 0 0 1 1 0
- 0 0 0 0 0 1 1 0 0 1
- 0 0 0 0 0 0 1 0 0 1
- 0 0 0 0 0 0 0 1 1 0
这是accumarray一种灵活的用法。
可以非常高效地用统计一个矩阵中不重复的数值有哪些,见rocwoods的帖子 [3 ]。
太晚了,简单写一下,还有很多细节问题没有列出来:二维甚至更高维的应用,除了sum还可以自己定义函数处理等等,知道大概意思之后,可以仔细看Matlab的Help[2 ]了。
References:
[1] Connected component labeling - Part 3 | Steve on Image Processing,http://blogs.mathworks.com/steve/2007/03/20/connected-component-labeling-part-3/
http://www.mathworks.com/help/techdoc/ref/accumarray .html
[3] 向量化操作的又一重要函数accumarray的用法总结,http://www.simwe.com/forum/thread-811616-1-3.html