マテマティカ:
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}]
これは、0 番目の対角線が主な対角線である i 番目の対角線のリストを提供し、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}
。