取两个向量并通过交错元素返回单个向量

时间:2015-06-26 11:51:13

标签: arrays matlab

我从书中发现了这个问题。这是个问题:

写一个函数 interleave ,它取两个相同长度的向量,并返回一个向量,该向量是交织两个输入向量的元素的结果。例如,
交错([1 2 3],[10 11 12])= [1 10 2 11 3 12]
交错([1 2 3 4],[ - 1 -2 -3 -4])= [1 -1 2 -2 3 -3 4 -4]

在书中它说它值9分。这就是我所做的:

function res = interleave(A,B)
trans = [A' B'];
reshape_col = length(A)+length(B);
res = reshape(trans', 1, reshape_col)

我做了什么让我得到了正确的答案,但对于9分而言似乎太少了。我不太确定是否有其他方式可以回答。任何帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:3)

连接和转置是要走的路:

A = [1 2 3]
B = [10 11 12] 

temp = [A(:),B(:)].' %'%//'concatenate and transpose
out = temp(:)          $// reshape to vector

所以你的解决方案非常接近,它不那么通用。 A(:)B(:)确保您的结果独立于输入向量的方向。此外,您应该使用transpose运算符.'而不是ctranspose '。使用reshape有点矫枉过正,:中的colon temp(:)就足够了,但如果您愿意,可以考虑重新整形的空输入[]选项,所以你不需要确定之前的总长度:

out = reshape([A(:),B(:)].',1,[]) %'
%// same as
temp = [A(:),B(:)].'              %'
out = temp(:).'

out = reshape([A(:),B(:)].',[],1) %'
%// same as 
temp = [A(:),B(:)].'              %'
out = temp(:)