我刚刚阅读了accumarray的文档,无法理解第二个例子。示例如下
/usr/bin/cvs
如果我这样做
val = 101:106';
subs = [1 1; 2 2; 3 2; 1 1; 2 2; 4 1]
subs =
1 1
2 2
3 2
1 1
2 2
4 1
A = accumarray(subs,val)
A =
205 0
0 207
0 103
106 0
然后我得到
B=accumarray(subs(:,1),val)
C=accumarray(subs(:,2),val)
这对我来说是合乎逻辑的。但是当我向{{1}添加第二列时,为什么B=
205
207
103
106
C =
311
310
的数字只是排列在“随机”(我猜它不是随机的,但对我来说似乎是随机的)B
矩阵的位置}?
答案 0 :(得分:3)
取自matmar的准确文件(注:下面的引文来自R2012a文件,并不完全符合current version)
subs中元素的位置决定了它的val值 选择累加的矢量; subs中元素的值 确定输出中累积矢量的位置。
因此,在您的示例中,'随机'排序来自subs指定的位置。打破潜艇的意义和最终结果,我们得到这样的结论:
val = 101:106';
subs = [1 1; 2 2; 3 2; 1 1; 2 2; 4 1]
subs =
1 1 <-- take val(1) which is 101 and put it at position [1, 1] in the output
2 2 <-- put 102 in position [2, 2]
3 2 <-- put 103 in position [3, 2]
1 1 <--- ...and so on
2 2
4 1
A = accumarray(subs,val)
A =
205 0 <--- [1, 1] has value 101+104, [1, 2] has no value
0 207 <--- [2, 1] has no value, [2, 2] has value 102+105
0 103 <--- ...and so on
106 0