对accumarray输出的解释

时间:2017-02-15 08:47:09

标签: matlab accumarray

我刚刚阅读了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矩阵的位置}?

1 个答案:

答案 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