Probleme beim Anwenden einer Liste von Indizes auf eine Matrix
Ich bin daran interessiert, eine 1D-Liste der Elemente des oberen Dreiecks einer Matrix zu erstellen.
Ich kann die Indizes dieser Elemente wie folgt erfassen:
upperTrianglularIndices[dim_] := Subsets[Table[i, {i, val /. val -> dim}], {2}];
Aber ich habe Mühe, die Matrixelemente mithilfe dieser Indizes tatsächlich auszuwählen.
Wenn ich eine Funktion habe, weiß ich, dass ich sie mit diesem Code abbilden kann:
f @@ # & /@ upperTrianglularIndices[3]
welches zurückkehren wird:
{f[1, 2], f[1, 3], f[2, 3]}
Meine Idee ist es also, meine Matrix als Funktion, Funktion [Matrix [[x]], x] auszudrücken und sie dann mit dem obigen Code auf jeden Index anzuwenden. Ich sehe, dass dies so richtig funktioniert:
(x \[Function] f[[x]]) @@ # & /@ upperTrianglularIndices[3]
Funktioniert aber nicht, wenn ich festlege, dass die Funktion die Auswahl des Matrixelements sein soll:
(x \[Function] {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}[[x]]) @@ # & /@
upperTrianglularIndices[3]
Dies gibt zurück (mit einigen Fehlern):
{f[[1]], f[[1]], f[[2]]}
Was ist das Problem hier?
Antworten
Clear["Global`*"]
Format[f[m_, n_]] := Subscript[f, m, n]
n = 3;
(mat = Array[f, {n, n}]) // MatrixForm
Die Indizes sind
upperTrianglularIndices[n_] :=
Table[{i, j}, {i, n}, {j, i, n}] // Flatten[#, 1] &
upperTrianglularIndices[n]
(* {{1, 1}, {1, 2}, {1, 3}, {2, 2}, {2, 3}, {3, 3}} *)
Die entsprechenden Elemente des Arrays sind
mat[[##]] & @@@ upperTrianglularIndices[n]