【问题标题】:Accumarray with non-scalar subscripts in Matlab?Matlab中具有非标量下标的Accumarray?
【发布时间】:2015-06-26 14:38:15
【问题描述】:

我在 Matlab 中有一个矩阵 A,维度为 m x 3,例如m=18

A=[ 2| 1 1;
    3| 1 2;
   -8| 1 3;
   -------
   -5| 1 1;
    2| 1 2;
    6| 1 3;
   -------
    7| 2 1;
    3| 2 2;
    1| 2 3;
    5| 2 4;
   -------
    3| 2 1;
   -8| 2 2;
    1| 2 3;
    0| 2 4;
   -------
    1| 2 1;
    2| 2 2;
    7| 2 3;
    9| 2 4]

A的特点如下:

  1. 它由t 子矩阵组成。在示例中为t=5

  2. 每个子矩阵t 的维度为b x 3,其中b<=mb 可以取{3,4,5,...,m} 中的任何值(显然,所有行的总和为m) .在示例中,第一个和第二个子矩阵的维度为3 x 3,最后三个子矩阵的维度为4 x 3

  3. 所有相同维度的子矩阵一个接一个地堆叠。在示例中,首先我们有子矩阵3 x 3,然后是子矩阵4 x 3

我想计算维度为f x 1 的向量B,其中f=size(unique(A(:,2:end),'rows','stable'),1),(在示例中为f=7),这样B(i,1) 是通过将A(:,1) 的元素j 相加得到的A(j,2:end) 等于unique(A(:,2:end),'rows','stable') 的第i 行,即

B=[2-5;
   3+2;
  -8+6
   7+3+1;
   3-8+2;
   1+1+7;
   5+0+9]

【问题讨论】:

    标签: matlab


    【解决方案1】:

    在检查行上的A 并使用'stable' 标志时,使用unique 的第三个输出,然后将其用作accumarray 的输入。第三个输出为矩阵A中看到的每个唯一出现的行向量分配一个唯一ID,非常适合在accumarray中使用:

    [~,~,f] = unique(A(:,2:end), 'rows', 'stable');
    B = accumarray(f, A(:,1));
    

    我们得到:

    B =
    
        -3 %// 2-5
         5 %// 3+2
        -2 %// -8+6
        11 %// 7+3+1
        -3 %// 3-8+2
         9 %// 1+1+7
        14 %// 5+0+9
    

    【讨论】:

      猜你喜欢
      • 2018-04-30
      • 1970-01-01
      • 2015-04-12
      • 2013-11-12
      • 1970-01-01
      • 2015-07-25
      • 2013-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多