1

M x M x N の行列があります。これは、N 個の M x M の行列を連結したものです。この行列を、M 行 M 列の各部分行列の対角線を取り、それらを連結することによって、M 行 N 列の行列に縮小したいと考えています。単純なベクトル化された方法でこれを行うにはどうすればよいですか?

4

1 に答える 1

3

対角線の線形インデックスを取得し、それを使用して新しい行列を形成することでそれを行うことができます

[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 以降を使用している場合にのみ機能します。バージョンがそれより古い場合は、代わりにダミー変数を使用してください。

于 2011-04-08T18:01:16.053 に答える