Restituisce un tensore di matrice in batch con nuovi valori diagonali in batch.
Dati "input" e "diagonale", questa operazione restituisce un tensore con la stessa forma e gli stessi valori di "input", ad eccezione delle diagonali specificate delle matrici più interne. Questi verranno sovrascritti dai valori in "diagonale".
`input` ha dimensioni `r+1` `[I, J, ..., L, M, N]`. Quando `k` è scalare o `k[0] == k[1]`, `diagonal` ha dimensioni `r` `[I, J, ..., L, max_diag_len]`. Altrimenti, ha dimensioni "r+1" "[I, J, ..., L, num_diags, max_diag_len]". "num_diags" è il numero di diagonali, "num_diags = k[1] - k[0] + 1". `max_diag_len` è la diagonale più lunga nell'intervallo `[k[0], k[1]]`, `max_diag_len = min(M + min(k[1], 0), N + min(-k[0] , 0))`
L'output è un tensore di rango `k+1` con dimensioni `[I, J, ..., L, M, N]`. Se `k` è scalare o `k[0] == k[1]`:
output[i, j, ..., l, m, n]
= diagonal[i, j, ..., l, n-max(k[1], 0)] ; if n - m == k[1]
input[i, j, ..., l, m, n] ; otherwise
output[i, j, ..., l, m, n]
= diagonal[i, j, ..., l, diag_index, index_in_diag] ; if k[0] <= d <= k[1]
input[i, j, ..., l, m, n] ; otherwise
"offset" è zero tranne quando l'allineamento della diagonale è a destra.
offset = max_diag_len - diag_len(d) ; if (`align` in {RIGHT_LEFT, RIGHT_RIGHT
and `d >= 0`) or
(`align` in {LEFT_RIGHT, RIGHT_RIGHT}
and `d <= 0`)
0 ; otherwise
}
Per esempio:
# The main diagonal.
input = np.array([[[7, 7, 7, 7], # Input shape: (2, 3, 4)
[7, 7, 7, 7],
[7, 7, 7, 7]],
[[7, 7, 7, 7],
[7, 7, 7, 7],
[7, 7, 7, 7]]])
diagonal = np.array([[1, 2, 3], # Diagonal shape: (2, 3)
[4, 5, 6]])
tf.matrix_set_diag(input, diagonal)
==> [[[1, 7, 7, 7], # Output shape: (2, 3, 4)
[7, 2, 7, 7],
[7, 7, 3, 7]],
[[4, 7, 7, 7],
[7, 5, 7, 7],
[7, 7, 6, 7]]]
# A superdiagonal (per batch).
tf.matrix_set_diag(input, diagonal, k = 1)
==> [[[7, 1, 7, 7], # Output shape: (2, 3, 4)
[7, 7, 2, 7],
[7, 7, 7, 3]],
[[7, 4, 7, 7],
[7, 7, 5, 7],
[7, 7, 7, 6]]]
# A band of diagonals.
diagonals = np.array([[[0, 9, 1], # Diagonal shape: (2, 4, 3)
[6, 5, 8],
[1, 2, 3],
[4, 5, 0]],
[[0, 1, 2],
[5, 6, 4],
[6, 1, 2],
[3, 4, 0]]])
tf.matrix_set_diag(input, diagonals, k = (-1, 2))
==> [[[1, 6, 9, 7], # Output shape: (2, 3, 4)
[4, 2, 5, 1],
[7, 5, 3, 8]],
[[6, 5, 1, 7],
[3, 1, 6, 2],
[7, 4, 2, 4]]]
# LEFT_RIGHT alignment.
diagonals = np.array([[[9, 1, 0], # Diagonal shape: (2, 4, 3)
[6, 5, 8],
[1, 2, 3],
[0, 4, 5]],
[[1, 2, 0],
[5, 6, 4],
[6, 1, 2],
[0, 3, 4]]])
tf.matrix_set_diag(input, diagonals, k = (-1, 2), align="LEFT_RIGHT")
==> [[[1, 6, 9, 7], # Output shape: (2, 3, 4)
[4, 2, 5, 1],
[7, 5, 3, 8]],
[[6, 5, 1, 7],
[3, 1, 6, 2],
[7, 4, 2, 4]]]
Classi nidificate
classe | MatrixSetDiag.Options | Attributi facoltativi per MatrixSetDiag |
Costanti
Corda | OP_NAME | Il nome di questa operazione, come noto al motore principale di TensorFlow |
Metodi pubblici
MatrixSetDiag.Options statico | allineare (Allinea stringa) |
Uscita <T> | comeuscita () Restituisce l'handle simbolico del tensore. |
statico <T estende TType > MatrixSetDiag <T> | |
Uscita <T> | produzione () Classifica "r+1", con "output.shape = input.shape". |
Metodi ereditati
Costanti
Stringa finale statica pubblica OP_NAME
Il nome di questa operazione, come noto al motore principale di TensorFlow
Metodi pubblici
allineamento pubblico statico MatrixSetDiag.Options (allineamento di stringhe)
Parametri
allineare | Alcune diagonali sono più corte di "max_diag_len" e devono essere riempite. "align" è una stringa che specifica come devono essere allineate rispettivamente le superdiagonali e le subdiagonali. Sono disponibili quattro allineamenti possibili: "RIGHT_LEFT" (predefinito), "LEFT_RIGHT", "LEFT_LEFT" e "RIGHT_RIGHT". "RIGHT_LEFT" allinea le superdiagonali a destra (riempi la riga a sinistra) e le diagonali secondarie a sinistra (riempi la riga a destra). È il formato di imballaggio utilizzato da LAPACK. cuSPARSE utilizza "LEFT_RIGHT", che è l'allineamento opposto. |
---|
Uscita pubblica <T> asOutput ()
Restituisce l'handle simbolico del tensore.
Gli input per le operazioni TensorFlow sono output di un'altra operazione TensorFlow. Questo metodo viene utilizzato per ottenere un handle simbolico che rappresenta il calcolo dell'input.
public static MatrixSetDiag <T> create ( ambito ambito, operando <T> input, operando <T> diagonale, operando < TInt32 > k, Opzioni... opzioni)
Metodo factory per creare una classe che racchiude una nuova operazione MatrixSetDiag.
Parametri
ambito | ambito attuale |
---|---|
ingresso | Rango `r+1`, dove `r >= 1`. |
diagonale | Classifica `r` quando `k` è un numero intero o `k[0] == k[1]`. Altrimenti, ha rango "r+1". `k >= 1`. |
k | Offset diagonale(i). Il valore positivo significa superdiagonale, 0 si riferisce alla diagonale principale e il valore negativo significa subdiagonali. "k" può essere un singolo numero intero (per una singola diagonale) o una coppia di numeri interi che specificano le estremità inferiore e superiore di una banda di matrice. "k[0]" non deve essere maggiore di "k[1]". |
opzioni | trasporta valori di attributi opzionali |
Ritorni
- una nuova istanza di MatrixSetDiag