Как я могу индексировать диагонали трехмерной матрицы в MATLAB? - PullRequest
1 голос
/ 08 апреля 2011

У меня есть матрица M-by-M-N, которая является объединением матриц N M-by-M.Я хочу свести эту матрицу к матрице M на N, взяв диагонали каждой подматрицы M на M и объединив их вместе.Как я могу сделать это простым векторизованным способом?

1 Ответ

3 голосов
/ 08 апреля 2011

Вы можете сделать это, получив линейные индексы диагоналей и используя его для формирования новой матрицы

[M,~,N]=size(A);%# A is your matrix
indx=cumsum([1:(M+1):M^2; M^2.*ones(N-1,M)]);%#diagonal indices

B=A(indx');%'# transpose to get MxN

В приведенном выше примере я использовал ~, чтобы игнорировать этот вывод из функции. Однако это работает, только если вы используете MATLAB R2009b и выше. Если ваша версия старше этой, используйте вместо этого фиктивную переменную.

...