【问题标题】:Summing over rows of a matrix in Matlab with the same index在 Matlab 中对具有相同索引的矩阵行求和
【发布时间】:2014-08-06 14:57:46
【问题描述】:

我在 Matlab 中有一个矩阵 A,维度为 hxk,其中元素 ik 报告来自 {1,2,...,s<=h} 的索引。索引可以跨行重复。我想获得维度sx(k-1)B,其中元素j 是索引jA(:,1:k-1) 行的总和。例如如果

A = [0.4  5    6    0.3  1;
     0.6 -0.7  3    2    2;
     0.3  4.5  6    8.9  1;
     0.9  0.8  0.7  3    3;
     0.7  0.8  0.9  0.5  2]

结果应该是

B = [0.7  9.5  12   9.2;
     1.3  0.1  3.9  2.5;
     0.9  0.8  0.7  3]

【问题讨论】:

    标签: arrays matrix matlab


    【解决方案1】:

    您需要accumarray 的多列版本。否则,您可以使用sparse,如下所示:

    [m n] = size(A);
    rows = ceil(1/(n-1):1/(n-1):m);
    cols = repmat(1:n-1,1,m);
    B = full(sparse(A(rows,end), cols, A(:,1:end-1).'));
    

    【讨论】:

      【解决方案2】:
      cell2mat(arrayfun(@(x) sum(A(A(:,end)==x,1:end-1),1), unique(A(:,end)), 'UniformOutput', false))
      

      关键点是选择行A(A(:,end)==x,1:end-1),其中xA(:,end) 的唯一元素

      【讨论】:

        猜你喜欢
        • 2019-02-06
        • 1970-01-01
        • 2014-08-23
        • 1970-01-01
        • 1970-01-01
        • 2011-10-30
        • 2015-07-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多