Получить первую строку от 1 до n матрицы и вторую строку от n + 1-й матрицы до n + n-й матрицы

У меня 1028 (7 * 21) матрица, и я сохранил эти 1028 различных матриц в одном массиве. допустим, что массив будет a, поэтому a [1] содержит первую матрицу a [2], содержащую вторую матрицу a [3], содержащую третью матрицу a [4], содержащую четвертую матрицу и т.д....... a [1028] содержат 1028-й матрицы.

Теперь я хочу получить от 1 до 147-й матрицы первую строку, от 148 до 294-й матрицы второй строки, от 295 до 441-й матрицы третьей строки и так далее до 1028.

1 ответ

После некоторых приготовлений вы можете использовать reshape.

% generate example data
X = {repmat({rand(7,21)},1028,1)}

который является 1028x1 cell но вам нужно 1029 матриц сделать его делимым на 147:

X = vertcat(X{1},{[]})

теперь вы можете изменить его по своему желанию:

Y = reshape(X,147,[])

который является 147x7 cell с 1028 ваших матриц 7x21 и одним пустым заполнителем.

Более общее решение для произвольного числа элементов X и выбранного дивизора будет:

divisor = 147;

N = numel( X{1} ); %// for example 1023
missingCells = ceil(N/divisor)*divisor - N; %// would be 6 then
X = vertcat( X{1}, repmat({[]}, missingCells,1) ); %// fill up with + 6 cells
Y = reshape( X, divisor,[] ); %// 147x7 cell

licensed under cc by-sa 3.0 with attribution.