2015-06-26 43 views
2

我有一個矩陣A在Matlab的維度m x 3,例如, m=18Accumarray在Matlab中有非標量下標嗎?

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 3b<=mb可以取任何值在{3,4,5,...,m}(顯然,在某種程度上,使得所有的行的總和爲m)。在此示例中,第一個和第二個子矩陣的維數爲,最後三個子矩陣的維數爲4 x 3

  3. 相同尺寸的所有子矩陣依次堆疊在一起。在該示例中,首先我們有子表格3 x 3,然後是子表格4 x 3

我想計算其中f=size(unique(A(:,2:end),'rows','stable'),1),(在例子中f=7),使得B(i,1)由具有A(j,2:end)等於unique(A(:,2:end),'rows','stable')i第行的A(:,1)j元素求和獲得的尺寸f x 1的矢量B ,即

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

回答

3

在行,並與檢查A時使用的unique第三輸出3210標誌,然後將其用作accumarray的輸入。第三輸出分配爲行向量的每個唯一出現在你的矩陣A,這非常適用於accumarray看到一個唯一的ID:

[~,~,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