我想根据时间值合并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中有没有一种优雅的方法来实现这一点?
答案 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);