Приведенные вами примеры матриц не имеют особого смысла, учитывая проблему, которую вы описываете в тексте. Если у вас есть матрица размером 42 на 1464 и вы хотите использовать MAT2CELL , чтобы разбить ее на массив ячеек, содержащий элементы размером 42 на 24, вы можете сделать следующее:
mat = repmat('a',42,1464); %# A sample character matrix containing all 'a's
[nRows nCols] = size(mat); %# Get the number of rows and columns in mat
nSubCols = 24; %# The number of desired columns in each submatrix
cellArray = mat2cell(mat,nRows,nSubCols.*ones(1,nCols/nSubCols));
Второй вход для MAT2CELL определяет, как строки будут разбиты по ячейкам вдоль измерения строки. В этом случае одно значение 42 (то есть nRows
) указывает, что результирующий массив ячеек будет иметь одну строку, а ячейки будут содержать матрицы с 42 строками.
Третий вход для MAT2CELL определяет, как столбцы будут разбиты по ячейкам вдоль размера столбца. В данном случае это вектор строки из 61 элемента (т.е. nCols/nSubCols
), все элементы которого содержат число 24 (т.е. nSubCols
). Это указывает на то, что результирующий массив ячеек будет иметь 61 столбец, а ячейки будут содержать матрицы с 24 столбцами.
Чистый результат состоит в том, что cellArray
заканчивается массивом ячеек 1 на 61, где каждая ячейка содержит подматрицу 42 на 24 mat
.
Вышеуказанное работает, когда nCols
является точным кратным nSubCols
. Если это не так, то вам придется распределять столбцы по своим ячейкам гетерогенным образом (то есть каждая ячейка может иметь различное количество столбцов в своей подматрице). Некоторые способы справиться с такой ситуацией обсуждаются в этом другом вопросе SO .