Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 取两个向量并通过交错它们的元素返回单个向量_Arrays_Matlab - Fatal编程技术网

Arrays 取两个向量并通过交错它们的元素返回单个向量

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

我在书中遇到了这个问题。问题是:

编写一个函数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)+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(:)