【问题标题】:Matlab - Accumarray confusion?Matlab - Accumarray 混乱?
【发布时间】:2015-07-25 04:29:21
【问题描述】:

我只是不明白 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。任何对此的帮助将不胜感激,谢谢!!

【问题讨论】:

    标签: matlab accumarray


    【解决方案1】:

    如 accumarray 文档中所述:

    考虑如下调用函数:

    A = accumarray(subs,val)
    

    m×n 矩阵 subs 的每一行中的值定义了一个 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
    

    这样更清楚吗?

    【讨论】:

    • 太棒了!很高兴我能帮忙 :) accumarray 非常强大,但有时在概念上有点难以想象。玩得开心!
    猜你喜欢
    • 2015-07-31
    • 2013-06-19
    • 2015-04-12
    • 2013-11-12
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    相关资源
    最近更新 更多