Accumarray在Matlab中使用非标量下标?

时间:2015-06-26 14:38:15

标签: matlab

我在维度A的Matlab中有一个矩阵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<=m,而b可以取{3,4,5,...,m}中的任何值(显然,某种方式是这样的所有行的总和是m)。在示例中,第一个和第二个子矩阵的维度为3 x 3,最后三个子矩阵的维度为4 x 3

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

  4. 我想计算维B的向量f x 1 f=size(unique(A(:,2:end),'rows','stable'),1),(在示例f=7中),以便通过求和获得B(i,1) j A(:,1)的元素A(j,2:end) i等于第unique(A(:,2:end),'rows','stable')B=[2-5; 3+2; -8+6 7+3+1; 3-8+2; 1+1+7; 5+0+9] ,即

    update openquery (LINKSERVERID, 'select tng_email from user_list where tng_id = 62873') 
      set tng_email = 'blah@blah.com';
    

1 个答案:

答案 0 :(得分:3)

在检查行uniqueA标记时使用'stable'的第三个输出,然后将其用作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