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