在matlab中从对角线重建矩阵

时间:2010-11-29 04:08:34

标签: matlab

给定matlab中矩阵的对角线矢量,是否有一种简单的方法来重建矩阵?

例如,给定

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

有没有简单的方法可以将其重建为以下内容?

1 2 4
3 5 7
6 8 9

由于原始块的尺寸已知,因此更容易实现。重建原始矩阵的旋转或转置是很好的,因为旋转和移调很容易撤消。更快更好,这个计算必须在许多x上进行。

谢谢!

1 个答案:

答案 0 :(得分: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