我只是不明白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 ..对此有任何帮助将不胜感激,谢谢!!
答案 0 :(得分:3)
正如accumarray的文档所述:
考虑对函数的调用,如下所示:
A = accumarray(subs,val)
m-by-n矩阵subs的每一行中的值定义a n维下标到输出中,A。
因此,在您的情况下,subs
是Something 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
更清楚了吗?