Matlab - Accumarray混淆?

时间:2015-05-13 18:14:44

标签: matlab accumarray

我只是不明白accumarray究竟是如何运作的。我检查了官方matlab documentation,但我仍然无法理解。

如果是这样的话,那里:

subs = [1
    3
    4
    3
    4] 

val = 101:105';

accumarray(subs,val) = 
[101
 0
 206
 208]

我得知A(1)= 101,A(2)= 0,A(3)= 102 + 104,A(4)= 103 + 105

但如果是这样的话:

subs = [1 1
        2 2
        3 2 
        1 1 
        2 2 
        4 1]

val = 101:106';

accumarray(subs,val) = 
[205 0 
 0 207
 0 203 
 106 0]

我不明白该方法是如何工作的......我有点得到A(1)= 101 + 104,然后A(2)= 102 + 105。

但为什么会在第二栏中显示?另外,为什么[3 2]线不包括在计算中?

我知道这是一个非常简单的问题,但这是我第一次使用Matlab ..对此有任何帮助将不胜感激,谢谢!!

1 个答案:

答案 0 :(得分:3)

正如accumarray的文档所述:

考虑对函数的调用,如下所示:

A = accumarray(subs,val)
  

m-by-n矩阵subs的每一行中的值定义a   n维下标到输出中,A。

因此,在您的情况下,subsSomething x 2数组,其每一行都被视为指向输出A的下标,其大小为4x2,因为最大值每列中分别为4和2。

因此,如果我们将subs分解为类似的行,即类似的下标,我们会看到有2行指向相同的坐标(1,1)以及(2,2)。只有1指向(4,1),1指向(3,2)。因此,我们希望输出A仅在这些坐标处具有累积值:

(1,1)
(2,2)
(3,2)
(4,1)

情况确实如此:

A =

   205     0
     0   207
     0   103
   106     0

更清楚了吗?