2012-07-29 21 views

Antwort

5

Hier ist eine Lösung:

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

Demo:

> 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

es nicht funktioniert, es gab mir diese Fehler: ??? Fehler:() -Indexierung muss zuletzt in einem Indexausdruck erscheinen. –

+0

Probieren Sie das neue aus. – aioobe

+0

wow, ich habe ein paar Änderungen daran vorgenommen und es hat funktioniert ...... danke für deine Hilfe ,,, es war sehr clever –

0

Hier ist eine andere Art und Weise

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

Beachten Sie, dass es zwei Möglichkeiten gibt, nachdem Sie die Diagonale eines n von n matirx beseitigen:

  1. Wenn die Folgen Matrix ist n von n-1 (wie in Ihrer Frage) , Können Sie es durch tun können:

    A=A'; 
    A(1:n+1:n*n)=[]; 
    A=reshape(A,n-1,n)'; 
    
  2. Wenn die Nachwirkungen Matrix n-1 von n ist, können Sie es wie folgt tun:

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

Das ist fast hervorragend, aber es gibt einen Zeilenvektor und nicht ein Array zurück. –

+0

@HighPerformanceMark Antwort aktualisiert – chaohuang

Verwandte Themen