2012-07-29 15 views

Odpowiedz

5

Oto jedno rozwiązanie:

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

to nie działa, to dało mi to błąd: ??? Błąd:() -indeksowanie musi pojawić się jako ostatnie w wyrażeniu indeksu. –

+0

Wypróbuj nową. – aioobe

+0

Wow, wprowadziłem pewne zmiany i zadziałało ...... dzięki za twoją pomoc, było bardzo sprytnie –

0

Oto kolejny sposób

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

zauważyć, że istnieją dwie możliwości po wyeliminować przekątnej n przez n matirx:

  1. Jeżeli następstwem macierz jest n przez n-1 (jak w pytaniu) Można to zrobić przez:

    A=A'; 
    A(1:n+1:n*n)=[]; 
    A=reshape(A,n-1,n)'; 
    
  2. Jeżeli matryca następstwem jest n-1 przez n, można zrobić to tak:

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

To jest prawie doskonałe, ale zwraca wektor wierszowy zamiast tablicy. –

+0

@HighPerformanceMark odpowiedź zaktualizowana – chaohuang

Powiązane problemy