在Matlab中从对角线重构矩阵

4

如果在matlab中给定矩阵的反对角向量,是否有一种简单的方法来重构矩阵?

例如,给定

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

有没有简单的方法将它重构为以下形式?
1 2 4
3 5 7
6 8 9

由于原始块的尺寸已知,因此这使得重建原始矩阵的旋转或置换变得稍微容易些。重建旋转或置换变换是可以的,因为旋转和置换是很容易撤销的。更快速地完成计算是更好的选择,因为这个计算需要在许多个 x 上进行。

谢谢!


x缺少一个9,这使得问题很奇怪。 - carlosdc
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接