Как изменить размер матрицы в MATLAB?
Предположим, у меня был 1-к-12 матрица, и я хотел изменить ее размер на 4-на-3 матрица. Как я мог это сделать?
мое текущее решение является уродливым:
for n = 1:(length(mat)/3)
out(n,1:3) = mat( ((n-1)*3 + 1):((n-1)*3 + 3) );
end
есть ли лучший способ сделать это?
3 ответов
reshape
, конечно, правильное решение, как указано @gnovice.
хорошая особенность reshape
это то, что он позволяет это:
A = 1:12;
B = reshape(A,4,[]);
B =
1 5 9
2 6 10
3 7 11
4 8 12
Итак, если вы не знаете, сколько столбцов будет,reshape
будет вычислить его для вас. Аналогично,reshape
заполнит количество строк, Если вы оставите это.
C = reshape(A,[],4)
C =
1 4 7 10
2 5 8 11
3 6 9 12
попробовать изменить функция:
A = (1-by-12 matrix);
B = reshape(A,4,3);
обратите внимание, что матрица B будут заполнены элементами из A по столбцу (т. е. столбцы будут заполняться сверху вниз, перемещаясь слева направо).
пример:
>> A = 1:12;
>> B = reshape(A,4,3)
B =
1 5 9
2 6 10
3 7 11
4 8 12
чтобы расширить решение gnovice:
Если вам нужен другой порядок построения матрицы, используйте transpose (оператор') или permute()
чтобы изменить порядок размеров после вызова reshape()
.