Holen Sie sich die diagonalen einer matrix in TensorFlow
Gibt es eine Möglichkeit zum extrahieren der diagonalen einer quadratischen matrix in TensorFlow? Das heißt, für eine matrix wie diese:
[
[0, 1, 2],
[3, 4, 5],
[6, 7, 8]
]
Ich möchte zu Holen die Elemente: [0, 4, 8]
In numpy, das ist ziemlich straight-forward über np.diag:
In TensorFlow, es ist ein diag-Funktion, aber es bildet nur eine neue matrix mit den Elementen in der angegebenen argument auf der diagonalen, das ist nicht das, was ich will.
Ich konnte mir vorstellen, wie dieses getan werden könnte, über schreitenden... aber ich sehe nicht, schreitende für Tensoren in TensorFlow.
Du musst angemeldet sein, um einen Kommentar abzugeben.
mit tensorflow 0.8 es ist möglich, zu extrahieren, die diagonalen Elemente mit
tf.diag_part()
(siehe Dokumentation)UPDATE
für tensorflow >= r1.12 seine
tf.linalg.tensor_diag_part
(siehe Dokumentation)Verwenden Sie die tf.diag_part()
Derzeit ist es möglich, zu extrahieren diagonalen Elemente mit tf.diag_part. Hier ist Ihr Beispiel:
Alte Antwort (wenn diag_part) nicht verfügbar war (immer noch relevant, wenn Sie etwas erreichen wollen, die aktuell nicht verfügbar ist):
Nach suchen, wenn die mathematische Operationen und tensor-Transformationen, es sieht nicht wie ein solcher Betrieb vorhanden ist. Auch wenn Sie zu extrahieren, können diese Daten mit matrix-Multiplikationen nicht effizient wäre (get Diagonale ist
O(n)
).Haben Sie drei Ansätze, beginnend mit den einfach zu hart.
tf.shape
Dies ist wohl ein workaround, aber funktioniert.
Verwenden Sie die
sammeln
Betrieb.Je nach Kontext, können Sie eine Maske ein schöner Weg, um "cancel" off-diagonal-Elemente der matrix, vor allem, wenn Sie planen, in der Reduzierung es trotzdem: