5

我有两个向量:

a = [1 3 5 7 9];
b = [2 4 6 8 10];

我需要明智地将元素组合在一起。这意味着我需要向量 a 的第一个元素,然后是向量 b 的第一个元素,a 的第二个元素,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 的解决方案在执行时间上是相似的。

4

5 回答 5

4
a = [1 3 5 7 9];
b = [2 4 6 8 10];
temp = [a; b];
combined = temp(:)';
于 2013-05-20T20:05:41.807 回答
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
于 2013-05-20T20:10:45.373 回答
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 个向量很简单。

于 2013-05-20T20:10:25.330 回答
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]; }

这会奏效!

于 2013-05-21T03:34:32.133 回答
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
于 2013-05-21T05:18:12.597 回答