Interweaving vectors

前端 未结 6 1077
傲寒
傲寒 2020-12-06 01:00

I would like to interweave two vectors in MATLAB. In fact, I\'d actually just like to add a zero between each element, but I figured I\'d ask the question in such a way that

6条回答
  •  情书的邮戳
    2020-12-06 01:26

    I wrote a MATLAB function that's on the File Exchange site (Interleave Vectors or Matrices) that does exactly what you want and more. Just download the .m file and put the file in the same directory as your other .m files, or copy and paste the function into your program.

    This function interleaves any number of vectors or matrices by row or column. If the input are just vectors, there is no need to specify orientation. Extra elements/rows/columns are appended on the end of the output matrix. The other answers provided are very specific for vectors of equal length or require making sure the orientation of vectors is correct.

    Examples of how to use the function:

    1) Interleaving rows of matrices

    A = [1 2; 3 4] B = [5 6;7 8]
    
    C = interleave2(A, B, 'row') 
    C = [1 2 
         5 6 
         3 4 
         7 8]
    

    2) Interleaving columns of matrices

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

    3) Interleaving vectors (Note: input vectors need not be same orientation)

    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]'
    

    4) Interleaving >2 matrices

    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]
    

    5) Interleaving columns of 2 matrices with unequal columns

    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] 
    

    6) Interleaving >2 vectors of unequal lengths

    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]
    

提交回复
热议问题