根据重复索引对数组求和

时间:2018-02-02 17:16:25

标签: arrays matlab

我有一个两行数组 transform(A,correct=zoo::na.locf0(correct,T)) index A B correct 1 1 1 1 0 2 2 1 2 0 3 3 1 3 0 4 4 2 1 1 5 5 2 2 1 6 6 2 3 1 ,如下所示。我想在第一行中的索引重复时总结第二行中的元素,并最终生成矩阵A。 我怎么能在MATLAB中做到这一点?

B

我尝试使用A = [1, 2, 2, 1, 2, 1, 2, 2, 1; 1, 2, 3, 4, 5, 1, 2, 3, 4]; B = [1, 2, 1, 2, 1, 2, 1; 1, 5, 4, 5, 1, 5, 4]; 函数(见下文)来计算索引

diff

但我不知道如何继续前进。

感谢。

1 个答案:

答案 0 :(得分:4)

这是一种可行的方法:

A = [1, 2, 2, 1, 2, 1, 2, 2, 1;
     1, 2, 3, 4, 5, 1, 2, 3, 4];           % data
ind = [true diff(A(1,:))~=0];              % logical indices of "new" values
s = accumarray(cumsum(ind).', A(2,:).').'; % sum values in second row of A in groups 
                                           % defined by the cumulative sum of ind
B = [A(1,ind); s];                         % build result