Matlab之accumarray用好索引矩阵

直接上例子,如果有:
val = [1 2 3 4 5];
subs = [1 1 4 2 4]‘; (subs必须为列向量,且必须和val同维度)
那么,A = accumarray(subs, val); 的结果是什么呢?

Q: accumarray总体是干嘛的?
A: 笼统的说,是用subs向量中的信息从val中提取数值做累加,累加完的结果放到A中。

Q: subs是干嘛的?
A: subs是一个累加指示向量。
subs提供的信息由两个:
(a). subs向量中的每个位置对应val的每个位置,因而两个向量必须同维度;
(b). subs中元素值相同的,val中的对应元素累加,元素值是累加完后放到A的什么地方。
如:上面的例子中,subs(2),subs(4)都是2,所以,val(2)和val(4)累加起来,放到A(2)这个位置上。

Q: val是干嘛的?
A: val是提供累加数值的,谁累加呢?就是A中的数值累加。选哪些数进行累加呢?subs向量中数值相同的对应位置的数。累加完后放到哪里呢?放到subs中指示的位置。

Q: A是怎么出来的?A的维度是什么?A的内容如何确定?
A: A的维度是subs中表示维度的数值最大的那个,如例子中size(A,1)==4,因为max(subs)==4。当然,这只是一维的情况。
最后A的结果就是:
A =
3 % subs(1)==subs(2)==1,所以,A(1) = val(1)+val(2)。
4 % subs(4)==2,所以,A(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)

[参考]:
[1]. http://blog.csdn.net/visionfans/article/details/6365741
[2] Connected component labeling – Part 3 | Steve on Image Processing,http://blogs.mathworks.com/steve/2007/03/20/connected-component-labeling-part-3/
[3] accumarray – The MathWorks,http://www.mathworks.com/help/techdoc/ref/accumarray .html
[4] 向量化操作的又一重要函数accumarray的用法总结,http://www.simwe.com/forum/thread-811616-1-3.html

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>