采用矩阵并检索两个对角线,保持原始矩阵的尺寸在MATLAB中

时间:2015-05-26 10:12:08

标签: matlab matrix

给定矩阵A = magic(5)

A =  17    24     1     8    15
     23     5     7    14    16
     4      6    13    20    22
     10    12    19    21     3
     11    18    25     2     9

我想使用rot90diagtriutril和矩阵sum等命令来获取矩阵:

A =  17    0     0     0     15
     0     5     0     14    0
     0     0     13    0     0
     0     12    0     21    0
     11    0     0     0     9

如果没有我写的命令你想不出解决这个问题的方法,请按照你自己的方式去做。

4 个答案:

答案 0 :(得分:2)

您可以使用eye功能进行索引

>> A(~eye(size(A)) & ~flipud(eye(size(A))))=0
A =
    17     0     0     0    15
     0     5     0    14     0
     0     0    13     0     0
     0    12     0    21     0
    11     0     0     0     9

答案 1 :(得分:1)

您只需使用linear indexing即可访问对角线:

n = size(A,1);
B = zeros(n);
B( 1:(n+1):end ) = A( 1:(n+1):end ); %// main diagonal
B( n:(n-1):(end-n+1) ) = A( n:(n-1):(end-n+1) )

你得到了

B =
17     0     0     0    15
 0     5     0    14     0
 0     0    13     0     0
 0    12     0    21     0
11     0     0     0     9

答案 2 :(得分:0)

另一种方法是:

mDiag   = diag(diag(A));
aDiag   = rot90(diag(diag(rot90(A))))';
overlap = A.*((diag(diag(A)) ~= 0) & (rot90(diag(diag(rot90(A)))) ~= 0));

solution = mDiag + aDiag - overlap

而不是:

solution =
17     0     0     0    15
 0     5     0    14     0
 0     0    13     0     0
 0    12     0    21     0
11     0     0     0     9

答案 3 :(得分:0)

使用bsxfun

out = A.*bsxfun(@(x,y) x == y | x+y == size(A,1)+1,(1:size(A,1)).',1:size(A,1))    %//'