2012-07-29 208 views

回答

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 
+0

它不工作,它給了我這個錯誤: ???錯誤:()-indexing必須最後出現在索引表達式中。 – 2012-07-29 14:31:55

+0

嘗試新的。 – aioobe 2012-07-29 14:35:35

+0

哇,我做了一些改變,它的工作......感謝您的幫助,,,這是非常聰明的 – 2012-07-29 14:42:42

0

這裏的另一種方式

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

注意,有兩種可能性,你消除對角線後n通過n matirx:

  1. 如果後果矩陣是nn-1(就像你的問題) ,你可以做到這一點:

    A=A'; 
    A(1:n+1:n*n)=[]; 
    A=reshape(A,n-1,n)'; 
    
  2. 如果善後矩陣是由n-1n,你可以做這樣的:

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

這幾乎是優秀的,但它確實返回一個行向量,而不是一個數組。 – 2012-07-29 15:04:41

+0

@HighPerformanceMark答案已更新 – chaohuang 2012-07-29 15:30:50