От вектора к матрице изменяйте каждые i-ые строки для каждого столбца - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть этот вектор:

arr = [1; 2; 3; 1; 2; 3; 1; 2; 3; 1; 2; 3]

И я хотел бы превратить его в матрицу 4x3, которая выглядит следующим образом:

mat = [1 1 1;...
2 2 2;...
3 3 3;...
1 1 1;...
2 2 2;...
3 3 3;...
1 1 1;...
2 2 2;...
3 3 3;...
1 1 1;...
2 2 2;...
3 3 3]

До сих пор я достиг этого, выполнив:

a1 = arr(1:3:end);
a2 = arr(2:3:end);
a3 = arr(3:3:end);
mat = [a1 a2 a3];

Есть ли более удобный способ, например, с помощью функции reshape?

1 Ответ

0 голосов
/ 22 ноября 2018

reshape не меняет количество элементов в матрице.Он изменяет матрицу, переставляя существующие элементы.

В вашем случае вы можете использовать repmat, который копирует матрицу или вектор один или несколько раз:

mat = repmat(arr,1,3);

Подробнее о repmat можно прочитать здесь .


Кроме того, ваше решение не дает матрицу, которую вы показали в блоке кода.Чтобы получить результат, полученный вашим решением, вы можете использовать reshape как таковой:

mat = reshape(arr,3,4)'
...