根据时间值合并2个向量

时间:2016-01-12 15:15:11

标签: matlab

我想根据时间值合并2个向量。这应该是这样的(第1列=时间,第2列=实际值):

A =

           1         234
           3         121
           4         456
           6        6756

B =

           2         435
           5          90
          10         365

结果:

C =

           1         234
           2         435
           3         121
           4         456
           5          90
           6        6756
          10         365

在Matlab中有没有一种优雅的方法来实现这一点?

4 个答案:

答案 0 :(得分:5)

这是一个简单的单行:

C = sortrows([A;B])

C =

      1    234
      2    435
      3    121
      4    456
      5     90
      6   6756
     10    365

请注意,这假定第1列中的所有时间值都是唯一的。如果不是这种情况,您可以使用accumarray

A =

      1    234
      3    121
      4    456
      6   6756

B =

     2   435
     5    90
    10   365

B = [B; 1 512]
B =

     2   435
     5    90
    10   365
     1   512

C = [A;B];
D = accumarray(C(:,1),C(:,2));
U = unique(C(:,1));
E = [U,D(U)]
E =

      1    746    %// 764 = 234 + 512
      2    435
      3    121
      4    456
      5     90
      6   6756
     10    365

答案 1 :(得分:1)

首先,您想要垂直连接:

A = [1 234; 3 121; 4 456; 6 6756];
B = [2 435; 5 90; 10 365];
C = vertcat(A,B) 

然后,您希望根据第一列对答案进行排序:

[~,inx]=sort(C(:,1));
out = C(inx,:);

>> out = 
       1         234
       2         435
       3         121
       4         456
       5          90
       6        6756
      10         365

比1班轮困难得多:

out = sortrows(C,1)

为什么选择Matlab,为什么在sort中没有选项来保留索引!

答案 2 :(得分:1)

首先,我将合并这些矩阵,然后按第一列对它们进行排序。

C = [A; B]
[Y, I] = sort(C(:,1))
C = C(I,:)

答案 3 :(得分:0)

在一般情况下,您需要进行某种形式的连接和排序。这是一个单线

C = sort([A,B],1);