在MATLAB中重塑/变换上三角矩阵

Sch*_*ges 4 matlab transformation matrix

我有一个上三角矩阵(没有对角线)给出:

M = [0 3 2 2 0 0; 0 0 8 6 3 2; 0 0 0 3 2 1; 0 0 0 0 2 1; 0 0 0 0 0 0]
Run Code Online (Sandbox Code Playgroud)

生成的矩阵应如下所示:

R = [0 0 0 0 0 0; 0 2 0 0 0 0; 2 3 1 0 0 0; 2 6 2 1 0 0; 3 8 3 2 0 0]
Run Code Online (Sandbox Code Playgroud)

由于我找不到描述我的目标的简单解释,我试图用图像将其可视化:

在此输入图像描述

我已经尝试过很多不同的组合rot90,transpose,flipud等,但我便无法找到合适的转型,让我的矩阵R

编辑:

矩阵的行M并不总是如上例所示那样排序.对于另一个矩阵M_2:

M_2 = [0 2 3 1 0 0; 0 0 3 6 3 9; 0 0 0 1 2 4; 0 0 0 0 2 6; 0 0 0 0 0 0]
Run Code Online (Sandbox Code Playgroud)

生成的矩阵R_2需要如下:

R_2 = [0 0 0 0 0 0; 0 9 0 0 0 0; 1 3 4 0 0 0; 3 6 2 6 0 0; 2 3 1 2 0 0]
Run Code Online (Sandbox Code Playgroud)

再次下面的可视化:

在此输入图像描述

Moh*_*nia 5

编辑: 受@ Dan评论提示的启发,可以进一步简化为

R = reshape(rot90(M), size(M));
Run Code Online (Sandbox Code Playgroud)

原答案:

这应该是一种简单的方法

F = rot90(M);
R = F(reshape(1:numel(M), size(M)))
Run Code Online (Sandbox Code Playgroud)

返回

R =
     0     0     0     0     0     0
     0     2     0     0     0     0
     2     3     1     0     0     0
     2     6     2     1     0     0
     3     8     3     2     0     0
Run Code Online (Sandbox Code Playgroud)

这个想法是,当你旋转矩阵时,你会得到

>> F = rot90(M)
F =
     0     2     1     1     0
     0     3     2     2     0
     2     6     3     0     0
     2     8     0     0     0
     3     0     0     0     0
     0     0     0     0     0
Run Code Online (Sandbox Code Playgroud)

这是一个6乘5的矩阵.如果考虑F上的线性索引,则相应的索引是

>> reshape(1:30, size(F))
     1     7    13    19    25
     2     8    14    20    26
     3     9    15    21    27
     4    10    16    22    28
     5    11    17    23    29
     6    12    18    24    30
Run Code Online (Sandbox Code Playgroud)

其中元素6,11,12,16,17,18和...现在为零,如果你将其重塑为5乘6矩阵,你得到

>> reshape(1:30, size(M))
     1     6    11    16    21    26
     2     7    12    17    22    27
     3     8    13    18    23    28
     4     9    14    19    24    29
     5    10    15    20    25    30
Run Code Online (Sandbox Code Playgroud)

现在那些与零值相对应的元素位于顶部,正是我们想要的.因此,通过传递此索引数组,F我们得到所需的R.

  • 为什么不只是'R =重塑(F,大小(M))`? (4认同)