2011-03-05 5 views

ответ

3

В качестве альтернативы fliplr и diag, вы можете индексировать непосредственно в матрицу, как это:

A = magic(3); 
s = length(A); 
idx = s:(s-1):(s*(s-1)+1); 
%# for anti-diagonal, use the following 
%#idx = (s*(s-1)+1):(-s+1):s; 

skewDiag = A(idx) 
skewDiag = 
    4  5  6 
+0

Не будет ли это быть ограничен матрицами 3х3? Общий случай? – pjama

+2

№. Это не ограничивается матрицами 3x3. Это общее решение для ЛЮБОГО размера квадратной матрицы. Только пример был 3х3. –

+0

@ Джонас: Кажется, что вы вычисляете «антидиагональную», которая не соответствует запросам OP. В некоторой литературе «асимметричная диагональ» такая же, как ваша «антидиагональная», но пример OP означает, что здесь дело обстоит не так. Спасибо – eat