Mathematica:
m = {{6, 0, 3, 5},
{3, 7, 1, 4},
{1, 4, 8, 2},
{0, 2, 5, 9}};
Table[Diagonal[m, i], {i, 1 - Length@m, Length@m[[1]] - 1}]
, который дает список i-й диагонали, где 0-я диагональ является главной диагональю, i = -1 дает нижнюю диагональ и т. Д. Другими словами, возвращается:
{{0}, {1, 2}, {3, 4, 5}, {6, 7, 8, 9}, {0, 1, 2}, {3, 4}, {5}}
Конечно, использование встроенной функции Diagonal
- это обман. Вот реализация Diagonal
с нуля:
(* Grab the diagonal starting from element (i,j). *)
diag0[m_,i_,j_] := Table[m[[i+k, j+k]], {k, 0, Min[Length[m]-i, Length@m[[1]]-j]}]
(* The i'th diagonal -- negative means below the main diagonal, positive above. *)
Diagonal[m_, i_] := If[i < 0, diag0[m, 1-i, 1], diag0[m, 1, i+1]]
Функция Table
в основном представляет собой цикл for, который собирается в список. Например,
Table[2*i, {i, 1, 5}]
возвращает {2,4,6,8,10}
.