Вот способ использования reshape
и implicit expansion
:
result = reshape(A((1:size(A,1)-n+1) + (0:n-1).', :), n, []);
Например, предположим, что n = 3
.Неявное расширение используется для извлечения индексов строк:
row_ind = (1:size(A,1)-n+1) + (0:n-1).';
Создается следующая матрица:
1 2
2 3
3 4
Извлечение нужных строк из A
:
A_expanded = A(row_ind, :)
Когда матрица row_ind
используется в качестве индекса, она ведет себя как вектор:
1
2
1 2 3
2 3 -> 2
3 4 3
4
A_expanded =
3 5 7
6 8 9
2 6 3
6 8 9
2 6 3
1 2 1
Теперь A_expanded
можно изменить до нужного размера:
result = reshape(A_expanded, n, []);
>>result =
3 6 5 8 7 9
6 2 8 6 9 3
2 1 6 2 3 1