Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 根据时间值合并2个向量_Matlab - Fatal编程技术网

Matlab 根据时间值合并2个向量

Matlab 根据时间值合并2个向量,matlab,Matlab,我想根据它们的时间值合并2个向量。这应该是这样的(第1列=时间,第2列=实际值): 结果: C = 1 234 2 435 3 121 4 456 5 90 6 6756 10 365 有没有一种优雅的方法可以在Matlab中实现这

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

结果:

C =

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

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

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

C = sort([A,B],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
中设置一个选项来保存索引呢

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

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

这里有一条简单的单行线:

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

即使@GameOfThrows进行了更正,这似乎也不会产生期望的结果。@mikkola是的,因为matlab排序与Java的按键排序不同,所以需要根据新索引重新编制索引,这真的很烦人。啊,我刚刚记住了这一点。不错@是的,你可能会期望
sort
能做到这一点,但MATLAB有时很奇怪。您还可以使用
sortrows
获取索引,就像在
sort
中一样,以备需要。
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