2010-11-29 11 views
4

行列の逆対角行列のベクトルをmatlabに与えると、行列を簡単に再構築できますか?Matlab内の対角線からの再構成行列

x = [1 2 3 4 5 6 7 8 9] 

与え例えば

は、次のようにそれを再構築する簡単な方法はありますか?

1 2 4 
3 5 7 
6 8 9 

これは、元のブロックの寸法が分かっているためにやや簡単になります。回転と転置は元に戻すのが簡単であるため、元の行列の回転または転置を再構築することは問題ありません。より速い方が良いです、この計算は多くのxで行われなければなりません。

ありがとうございます!

+0

xは右、9まで行きますか? – Jonas

+0

xには9.がありません。これは疑問を奇妙にします。 – carlosdc

答えて

4

あなたが対応するHankel行列を作成し、並べ替えのためにそれを使用することができます(出力は正方行列である場合にのみ動作します!):

x = [1 2 3 4 5 6 7 8 9]; 

%# find size of output (works only with square arrays) 
n=sqrt(length(x)); 

%# create Hankel matrix 
hh = hankel(1:n,n:(2*n-1)); 

%# sort to get order of elements (conveniently, sort doesn't disturb ties) 
[~,sortIdx]=sort(hh(:)); 

%# reshape and transpose 
out = reshape(x(sortIdx),n,n)'; %'# SO formatting 

out = 
    1  2  4 
    3  5  7 
    6  8  9 
関連する問題