交织矢量

Cap*_*rog 15 matlab vector

我想在MATLAB中交织两个向量.事实上,我实际上只想在每个元素之间添加一个零,但我想我会以这样的方式提出问题,以便我学会如何将其应用于其他情况.

我的具体应用:我想采用矢量(例如[1 2 3])和输出[0 1 0 2 0 3].

在更广泛的问题:我将如何做到这一点有两个不同的载体,例如[1 2 3][9 8 7]交织产生[9 1 8 2 7 3].

在上述任何一个或两个问题中,任何帮助都非常受欢迎.

mar*_*n78 29

我将利用MATLAB向量的内部布局:它们存储在列专用中,即列中的值变化最快.交错两个矢量ab,简单地做:

ar = a(:).';    % make sure ar is a row vector
br = b(:).';    % make sure br is a row vector
A = [ar;br];   % concatenate them vertically
c = A(:);      % flatten the result
Run Code Online (Sandbox Code Playgroud)

  • 使用`.``而不是`'`,否则它不适用于复数. (5认同)

Hig*_*ark 11

尝试

reshape([[9 8 7];[1 2 3]],1,[])
Run Code Online (Sandbox Code Playgroud)


aar*_*rkk 9

这里有一些代码可以实现你想要的:

nums   = rand(1,3)
output = zeros(1,2*numel(nums));
output(2:2:end) = nums
Run Code Online (Sandbox Code Playgroud)

输出如下:

nums =

    0.9134    0.6324    0.0975


output =

         0    0.9134         0    0.6324         0    0.0975
Run Code Online (Sandbox Code Playgroud)

按照其他两个答案的样式,您可以使用以下内容获得所需的零输出:

nums = rand(1,3);
reshape([zeros(size(nums));nums],1,[])
Run Code Online (Sandbox Code Playgroud)

显然,nums应该用你想要使用的矢量替换.如上所述,您应该在调用之前确保它是行向量reshape.


shi*_*izu 5

我在文件交换站点上编写了一个 MATLAB 函数(Interleave Vectors 或 Matrices),它完全可以满足您的需求,甚至更多。只需下载 .m 文件并将该文件与其他 .m 文件放在同一目录中,或者将该函数复制并粘贴到您的程序中。

此函数按行或列交错任意数量的向量或矩阵。如果输入只是向量,则无需指定方向。额外的元素/行/列附加在输出矩阵的末尾。提供的其他答案对于相等长度的向量非常具体,或者需要确保向量的方向正确。

如何使用该功能的示例:

1) 矩阵行交错

A = [1 2; 3 4] B = [5 6;7 8]

C = interleave2(A, B, 'row') 
C = [1 2 
     5 6 
     3 4 
     7 8]
Run Code Online (Sandbox Code Playgroud)

2) 矩阵列交错

C = interleave2(A, B, 'col') 
C = [1 5 2 6 
     3 7 4 8]
Run Code Online (Sandbox Code Playgroud)

3)交错向量(注意:输入向量不需要具有相同的方向)

A = [1 2 3 4] B = [5 6 7 8 9]' 
C = interleave2(A, B) 
C = [1 5 2 6 3 7 4 8 9]'
Run Code Online (Sandbox Code Playgroud)

4) 交织 >2 个矩阵

A = [1 2;3 4] B = [5 6;7 8] 
C = [9 10;11 12] D = [13 14;15 16]

E = interleave2(A, B, C, D, 'col') 
E = [1 5 9 13 2 6 10 14 
     3 7 11 15 4 8 12 16]
Run Code Online (Sandbox Code Playgroud)

5) 2个矩阵的列与不等列交错

A = [1 2;3 4] 
B = [5 6 7 8;9 10 11 12] 
C = interleave2(A, B, 'col') 
C = [1 5 2 6 7 8 
     3 9 4 10 11 12] 
Run Code Online (Sandbox Code Playgroud)

6) 交织>2个不等长的向量

A = [1 2 3 4] B = [5 6 7] 
C = [8 9 10 11 12 13] 
D = interleave2(A, B, C) 
D = [1 5 8 2 6 9 3 7 10 4 11 12 13]
Run Code Online (Sandbox Code Playgroud)