我有两个向量:
a = [1 3 5 7 9];
b = [2 4 6 8 10];
我需要将元素结合在一起。这意味着我需要vector a的第一个元素,然后是vector b的第一个元素,b的第二个元素,b的第二个元素,依此类推,直到我得到以下内容:
combined = [1 2 3 4 5 6 7 8 9 10]
我如何在MatLab中执行此操作?
我对前三个答案(Josh,Marc,& Kronos)进行了测试,并比较了运行它们所需的时间。在进行10次迭代预热后,我每跑100次。创建的向量长度完全相同(16e + 6),随机值范围为1到100:
Test Results
Test: Total Time (100 runs): Avg Time Per Exec:
Josh B 21.3687 0.2137
Marc C 21.4273 0.2143
Kronos 31.1897 0.3119
似乎Josh和Marc的解决方案在执行时间上都相似。
答案 0 :(得分:4)
a = [1 3 5 7 9];
b = [2 4 6 8 10];
temp = [a; b];
combined = temp(:)';
答案 1 :(得分:3)
这可以通过以下方式完成:
a = [1 3 5 7 9];
b = [2 4 6 8 10];
combinedSize = size(a, 2) * 2;
combined(1:2:combinedSize) = a;
combined(2:2:combinedSize) = b;
这显然是假设你的矢量大小完全相同。如果您想要合并两个不同大小的向量,那么您可以执行以下操作:
combinedSize = max(size(a, 2), size(b, 2)) * 2;
combined = NaN(1,combinedSize);
combined(1:2:size(a,2)*2) = a;
combined(2:2:size(b,2)*2) = b;
这将为较小的向量的剩余元素放置NaN
。例如,给出以下样本向量:
a = [1 3 5 7 9 11];
b = [2 4 6 8];
将产生组合向量:
combined =
1 2 3 4 5 6 7 8 9 NaN 11 NaN
答案 2 :(得分:1)
将矢量放在矩阵中,并使用reshape
。例如:
>> A=[1 2 3]
A =
1 2 3
>> B=[4 5 6]
B =
4 5 6
>> C=reshape([A;B],1,size(A,2)+size(B,2))
C =
1 4 2 5 3 6
直接推广到2个以上的向量。
答案 3 :(得分:0)
您也可以尝试循环,例如:
a=[1 2 3 4 5];
b=[11 12 13 14 15];
for i = 1:N
{
if (i%2==0)
{ c[i] = b[i]; }
else
{ c[i] = a[i]; }
这应该有效!
答案 4 :(得分:0)
上述所有答案仅在两个向量具有相同数量的元素时才有效。即使它们具有不同数量的元素,以下内容也会起作用:
>>
A = [1 3 5];
B = [2 4 6 7 8];
C = [1 3 5 7 8];
D = [2 4 6];
AB = nan(1,2*max(numel(A),numel(B)));
CD = nan(1,2*max(numel(C),numel(D)));
AB(2*(1:length(A))) = A;
AB(1+2*(1:length(B))) = B;
CD(2*(1:length(C))) = C;
CD(1+2*(1:length(D))) = D;
>>
AB = AB(~isnan(AB))
CD = CD(~isnan(CD))
结果将是:
AB =
1 2 3 4 5 6 7 8
CD =
1 2 3 4 5 6 7 8