在matlab中用对角线重构矩阵

在matlab中用对角线重构矩阵,matlab,Matlab,在matlab中给定一个矩阵的反对角线向量,有没有一种简单的方法来重建矩阵 例如,给定 x = [1 2 3 4 5 6 7 8 9] 有没有什么简单的方法可以将其重建为以下内容 1 2 4 3 5 7 6 8 9 由于已知原始块的尺寸,这稍微容易一些。重建原始矩阵的旋转或转置是很好的,因为旋转和转置很容易撤消。速度越快越好,此计算必须在多个xs上进行 谢谢 您可以创建相应的矩阵并将其用于排序(仅当输出为方形矩阵时有效!): x缺少一个9。这使得这个问题很奇怪。 x = [1 2 3 4 5

在matlab中给定一个矩阵的反对角线向量,有没有一种简单的方法来重建矩阵

例如,给定

x = [1 2 3 4 5 6 7 8 9]
有没有什么简单的方法可以将其重建为以下内容

1 2 4
3 5 7
6 8 9
由于已知原始块的尺寸,这稍微容易一些。重建原始矩阵的旋转或转置是很好的,因为旋转和转置很容易撤消。速度越快越好,此计算必须在多个
x
s上进行


谢谢

您可以创建相应的矩阵并将其用于排序(仅当输出为方形矩阵时有效!):


x缺少一个9。这使得这个问题很奇怪。
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