如何在MATLAB中删除矩阵的对角元素?

时间:2012-07-29 14:10:22

标签: matlab matrix diagonal

我需要一个代码来省略矩阵的对角元素 例如,如果

A =

[1 2 3;
 1 2 3;
 1 2 3];

输出来了:

[2 3;
 1 3;
 1 2];

我怎么能这么做(我知道很长但我需要它很简单)

3 个答案:

答案 0 :(得分:5)

这是一个解决方案:

Alower = tril(A, -1);
Aupper = triu(A,  1);
result = Alower(:, 1:end-1) + Aupper(:, 2:end)

<强>演示:

> A = [1 2 3; 1 2 3; 1 2 3]
A =

   1   2   3
   1   2   3
   1   2   3

> tril(A, -1)(1:end, 1:end-1) + triu(A, 1)(1:end, 2:end)
ans =

   2   3
   1   3
   1   2

答案 1 :(得分:3)

请注意,在n matirx消除n的对角线后,有两种可能性:

  1. 如果善后矩阵为n n-1(如您的问题所示),则可以通过以下方式完成:

    A=A';
    A(1:n+1:n*n)=[];
    A=reshape(A,n-1,n)';
    
  2. 如果善后矩阵是n-1 n,您可以这样做:

    A(1:n+1:n*n)=[];
    A=reshape(A,n-1,n);
    

答案 2 :(得分:0)

这是另一种方式

reshape(A(setdiff(1:9,1:4:9)),[3,2])