Вы можете преобразовать матрицу A
в массив ячеек. Сначала вы будете хотеть, чтобы создать N-элементный массив вашей размерности матрицы (15) для определения размеров ваших клеток:
dimArray = repmat(15, 1, N); % 1xN array of the number 15
Следующих вы будете называть mat2cell
на вашей матрице A
, чтобы преобразовать его в клетку массив, в котором каждая ячейка представляет собой 15xM подматрицы А:
newA = mat2cell(A, dimArray);
Наконец, вызовите cellfun
на массив ячеек, чтобы сделать ваше умножение:
result = cellfun(@(x) B*x, newA, 'UniformOutput', false);
Который должен дать вам массив ячеек result
, содержащий результат B*A(block)
для каждого блока в вашей матрице A
. Вероятно, вы можете поместить все это в одну строку или не более двух:
result = cellfun(@(x) B*x, mat2cell(A, repmat(15, 1, N)), 'UniformOutput', false);
Не самый чистый код для чтения. Это похоже на несколько круглый способ сделать это. Если кто-то получит его для работы с repmat
или подобным, это может быть лучшим способом.
Посмотрите на этот stackoverflow [вопрос] (http://stackoverflow.com/questions/1745299/multiply-a-3d-matrix-with-a-2d-matrix). – user2482876