Arrays 取两个向量并通过交错它们的元素返回单个向量
我在书中遇到了这个问题。问题是: 编写一个函数interleave,该函数接受两个长度相同的向量,并返回一个向量,该向量是两个输入向量元素交错的结果。例如,Arrays 取两个向量并通过交错它们的元素返回单个向量,arrays,matlab,Arrays,Matlab,我在书中遇到了这个问题。问题是: 编写一个函数interleave,该函数接受两个长度相同的向量,并返回一个向量,该向量是两个输入向量元素交错的结果。例如, 交织([1 2 3],[10 11 12])=[1 10 2 11 3 12] 交织([1234],-1-2-3-4])=[1-12-23-34-4] 书中说它值9马克。这就是我所做的: function res = interleave(A,B) trans = [A' B']; reshape_col = length(A)+lengt
交织([1 2 3],[10 11 12])=[1 10 2 11 3 12]
交织([1234],-1-2-3-4])=[1-12-23-34-4] 书中说它值9马克。这就是我所做的:
function res = interleave(A,B)
trans = [A' B'];
reshape_col = length(A)+length(B);
res = reshape(trans', 1, reshape_col)
我所做的让我得到了正确的答案,但对于9分来说似乎太少了。我不太确定是否还有其他方法可以回答。任何帮助都将不胜感激。谢谢连接和转置是一种方式:
A = [1 2 3]
B = [10 11 12]
temp = [A(:),B(:)].' %'%//'concatenate and transpose
out = temp(:) $// reshape to vector
因此,您的解决方案非常接近,只是不太通用A(:)
和B(:)
确保结果独立于输入向量的方向。此外,您应该使用运算符“
,而不是”
。使用<代码>整形/<代码>有点过份,<<代码>:<代码> <代码> TEMP(:):/>代码是足够的,但是如果您想考虑空输入<代码> []/Cord>选项整形,那么您不需要确定之前的总长度:
out = reshape([A(:),B(:)].',1,[]) %'
%// same as
temp = [A(:),B(:)].' %'
out = temp(:).'
或
可能是最后一次
重塑
(而不是(:)
)以根据输入形状返回行或列?谢谢您的帮助。我查看了您所附的链接,我只想澄清一点,转置运算符是否“在某种程度上,在使用*进行元素乘法的基础上工作,当维度不一致时?”?thanks@LuisMendo我喜欢你最后使用重塑的想法。你的建议和@thewaywewalk的建议非常有效。我想,到最后,它会归结到最后的偏好。@paurash_008“
只是transposition@paurush_008不,没有乘法运算。当你做了这些事情后,差别就变得明显了。
out = reshape([A(:),B(:)].',[],1) %'
%// same as
temp = [A(:),B(:)].' %'
out = temp(:)