0

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

如果是这样的,在哪里:

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

4

1 回答 1

3

如 accumarray 的文档中所述:

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

A = accumarray(subs,val)

m×n 矩阵 subs 的每一行中的值在输出 A 中定义了一个 n 维下标。

因此,在您的情况下,因为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

这更清楚吗?

于 2015-05-13T18:32:05.137 回答