如何在MatLab中明智地组合两个大小相等的向量元素?

时间:2013-05-20 19:58:40

标签: matlab vector

我有两个向量:

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的解决方案在执行时间上都相似。

5 个答案:

答案 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