2015-12-08 4 views

ответ

3

Чтобы проиндексировать элементы, вы можете использовать blkdiag, чтобы создать соответствующую маску.

%your parameters 
n=2 
j=4 
%some example matrix 
M=magic(n*j); 
%create the input for blkdiag, j matrices of size n 
h=repmat({true(n)},j,1) 
%use blkdiag to select the elements 
M(logical(blkdiag(h{:}))) 
+1

Очень хороший ответ! Я бы выбрал окончательный 'reshape (M (...), n, n, [])', но, очевидно, это не очень сложно понять. –

+0

@AndrasDeak Кроме того, если я хочу взять произведение этих диагональных матриц, есть ли способ применить функцию prod к выходу 'reshape'? – user3701257

+0

@ user3701257, если вы имеете в виду элемент-мудрый продукт, то да, вы можете вызвать 'prod (newM, 3)', если 'newM' является вашей' reshape'd '[n x n x j]' матрицей. Если вам нужен матричный продукт, это другая проблема и гораздо сложнее (для этого вам, вероятно, понадобится цикл). –