我需要一個代碼省略矩陣 的對角線元素,例如,如果如何在MATLAB中刪除矩陣的對角線元素?
A =
[1 2 3;
1 2 3;
1 2 3];
的輸出來:
[2 3;
1 3;
1 2];
我怎麼能做到這一點簡單的(我知道一個漫長的,但我需要它簡單)
我需要一個代碼省略矩陣 的對角線元素,例如,如果如何在MATLAB中刪除矩陣的對角線元素?
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
這裏的另一種方式
reshape(A(setdiff(1:9,1:4:9)),[3,2])
注意,有兩種可能性,你消除對角線後n
通過n
matirx:
如果後果矩陣是n
由n-1
(就像你的問題) ,你可以做到這一點:
A=A';
A(1:n+1:n*n)=[];
A=reshape(A,n-1,n)';
如果善後矩陣是由n-1
n
,你可以做這樣的:
A(1:n+1:n*n)=[];
A=reshape(A,n-1,n);
這幾乎是優秀的,但它確實返回一個行向量,而不是一個數組。 – 2012-07-29 15:04:41
@HighPerformanceMark答案已更新 – chaohuang 2012-07-29 15:30:50
它不工作,它給了我這個錯誤: ???錯誤:()-indexing必須最後出現在索引表達式中。 – 2012-07-29 14:31:55
嘗試新的。 – aioobe 2012-07-29 14:35:35
哇,我做了一些改變,它的工作......感謝您的幫助,,,這是非常聰明的 – 2012-07-29 14:42:42