Я написал функцию MATLAB, что на бирже файлов сайта (Interleave Vectors or 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]
2) перемежении столбцов матриц
C = interleave2(A, B, 'col')
C = [1 5 2 6
3 7 4 8]
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]'
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]
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]
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]
Чтобы гарантировать, что это вектор строки, вы можете написать ' nums (:) '' – Jonas
Решение' reshape' очень элегантно! – Anael