2010-11-29 96 views
4

給出了matlab中矩陣的反對角線矢量,是否有一種簡單的方法來重建矩陣?從matlab中的對角線重建矩陣

例如,給定

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

有沒有簡單的方法把它重建以下?

1 2 4 
3 5 7 
6 8 9 

由於原始塊的尺寸是已知的,所以稍微容易一些。重建原始矩陣的旋轉或轉置很好,因爲旋轉和轉置很容易撤消。更快,更好,這個計算必須在許多x s完成。

謝謝!

+0

X上升至9,對不對? – Jonas 2010-11-29 04:16:36

回答

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