mar*_*n78 29
我将利用MATLAB向量的内部布局:它们存储在列专用中,即列中的值变化最快.交错两个矢量a和b,简单地做:
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)
这里有一些代码可以实现你想要的:
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.
我在文件交换站点上编写了一个 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)
| 归档时间: |
|
| 查看次数: |
18449 次 |
| 最近记录: |