2016-07-09 14 views
0

Ich möchte auf die anti-diagonals einer Matrix als Ansichten zugreifen. Ist das im Gürteltier möglich?Wie kann ich in Gürteltier anti-diagonale Ansichten bekommen?

wollte Leute meinen Code

vec get_antidiag (const mat & A, const uint k) { 
    const uint n = A.n_rows; 
    const uint m = A.n_cols; 
    const uint start_row = max(0, static_cast<int>(k+1-m)); 
    const uint end_row = min(k, n-1); 
    const uint len = end_row - start_row +1; 
    vec v (len); 
    for (uint i = 0; i < len; ++i) { 
     v(i) = A(i+start_row, k-(i+start_row)); 
    } 
    return v; 
} 

void set_antidiag (mat & A, const uint k, const vec v) { 
    const uint n = A.n_rows; 
    const uint m = A.n_cols; 
    const uint start_row = max(0, static_cast<int>(k+1-m)); 
    const uint end_row = min(k, n-1); 
    const uint len = end_row - start_row +1; 
    for (uint i = 0; i < len; ++i) { 
     A(i+start_row, k-(i+start_row)) = v(i); 
    } 
} 
+0

was Hast du es schon versucht? Zeig uns deinen Code. – surajsn

Antwort

0

Sie diagvec() und fliplr() verwenden können, um sehen DIAG

vec get_antidiag (const mat & A, const uint k) { 
    mat B=A; 
    B = fliplr(B); 
    return diagvec(B,k); 
} 

haben nichts zu extrahieren fand die Diag zur Einstellung ...

+0

Es wäre effizienter, einfach diagvec (fliplr (A), k); ' – hbrerkere