我从书中发现了这个问题。这是个问题:
写一个函数 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]
function res = interleave(A,B)
trans = [A' B'];
reshape_col = length(A)+length(B);
res = reshape(trans', 1, reshape_col)
我做了什么让我得到了正确的答案,但对于9分而言似乎太少了。我不太确定是否有其他方式可以回答。任何帮助将不胜感激。谢谢
答案 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(:)