我需要一个代码来省略矩阵的对角元素
例如如果
输出结果如下:
A =
[1 2 3;
1 2 3;
1 2 3];
输出结果如下:
[2 3;
1 3;
1 2];
我该如何简单地实现它(我知道有一个冗长的方法,但我需要简单易懂的方式)。
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
n
乘n
矩阵的对角线后,有两种可能性:
If the aftermath matrix is n
by n-1
(like in your question), you can do it by:
A=A';
A(1:n+1:n*n)=[];
A=reshape(A,n-1,n)';
If the aftermath matrix is n-1
by n
, you can do it like this:
A(1:n+1:n*n)=[];
A=reshape(A,n-1,n);
reshape(A(setdiff(1:9,1:4:9)),[3,2])
:
而不是1:end
。此外,演示中的语法仅适用于 Octave(在 MATLAB 中不支持直接索引结果)。 - Amro