2015-05-13 52 views
0

我只是不明白accumarray的工作原理。我查了官方matlab documentation,但我仍然无法完全理解。Matlab - Accumarray混淆?

如果它是这样的,其中:

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 ..任何帮助,将不胜感激,谢谢!

回答

3

如在该文档为accumarray描述:

考虑像下面的函数的调用:

A = accumarray(subs,val) 

的m乘n矩阵潜艇的每一行中的值定义一个 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 

是不是更清晰?

+0

这使得更多的意义谢谢你! – ocean800

+1

真棒!很高兴我能帮上忙:)'accumarray'非常强大,但有时难以在概念上形象化。玩的开心! –