matlab里,ACCU是什么

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 07:15:49
matlab里,ACCU是什么

matlab里,ACCU是什么
matlab里,ACCU是什么

matlab里,ACCU是什么
你说的是accumarray 吧?是的话 一下啊可能对你有帮助.
对于A = accumarray(subs,val)这么一个调用,有这么几个问题,理解清楚,就理解了这个函数.
例子:
val = [ 1 2 3 4 5 ]
subs = [ 1 2 4 2 4 ]' % subs要是列向量
Q: accumarray总体是干嘛的? book.iLoveMatlab.cn
A: 笼统的说,是用subs向量中的信息从val中提取数值做累加,累加完的结果放到A中.
Q: subs是干嘛的?
A: subs是一个累加指示向量.
subs提供的信息由两个:
(a). subs向量中的每个位置对应val的每个位置; 《Simulink与信号处理》
(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的结果就是:
view plaincopy to clipboardprint?
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)
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)上去了 Matlab中文论坛
8 % subs(3)==subs(5)==4,所以,A(4)=val(3)+val(5)
Steve中用accumarray实现了一个从坐标对儿中统计位置的功能:
view plaincopy to clipboardprint?
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
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一种灵活的用法.