Devuelve la parte diagonal por lotes de un tensor por lotes.
Devuelve un tensor con las diagonales `k[0]`-th a `k[1]`-th de la `entrada` por lotes.
Supongamos que `entrada` tiene dimensiones `r` `[I, J, ..., L, M, N]`. Sea `max_diag_len` la longitud máxima entre todas las diagonales a extraer, `max_diag_len = min(M + min(k[1], 0), N + min(-k[0], 0))` Sea `num_diags` Sea el número de diagonales a extraer, `num_diags = k[1] - k[0] + 1`.
Si `num_diags == 1`, el tensor de salida es de rango `r - 1` con forma `[I, J, ..., L, max_diag_len]` y valores:
diagonal[i, j, ..., l, n]
= input[i, j, ..., l, n+y, n+x] ; if 0 <= n+y < M and 0 <= n+x < N,
padding_value ; otherwise.
donde `y = max(-k [1], 0)`, `x = máx(k[1], 0)`.De lo contrario, el tensor de salida tiene rango `r` con dimensiones `[I, J, ..., L, num_diags, max_diag_len]` con valores:
diagonal[i, j, ..., l, m, n]
= input[i, j, ..., l, n+y, n+x] ; if 0 <= n+y < M and 0 <= n+x < N,
padding_value ; otherwise.
donde `d = k[1] - m`, `y = max(-d, 0) - compensación`, y `x = max(d, 0) - compensación`.`offset` es cero excepto cuando la alineación de la diagonal es a la derecha.
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
donde `diag_len(d) = min(cols - max(d, 0), filas + min(d, 0))`.La entrada debe ser al menos una matriz.
Por ejemplo:
input = np.array([[[1, 2, 3, 4], # Input shape: (2, 3, 4)
[5, 6, 7, 8],
[9, 8, 7, 6]],
[[5, 4, 3, 2],
[1, 2, 3, 4],
[5, 6, 7, 8]]])
# A main diagonal from each batch.
tf.matrix_diag_part(input) ==> [[1, 6, 7], # Output shape: (2, 3)
[5, 2, 7]]
# A superdiagonal from each batch.
tf.matrix_diag_part(input, k = 1)
==> [[2, 7, 6], # Output shape: (2, 3)
[4, 3, 8]]
# A band from each batch.
tf.matrix_diag_part(input, k = (-1, 2))
==> [[[0, 3, 8], # Output shape: (2, 4, 3)
[2, 7, 6],
[1, 6, 7],
[5, 8, 0]],
[[0, 3, 4],
[4, 3, 8],
[5, 2, 7],
[1, 6, 0]]]
# LEFT_RIGHT alignment.
tf.matrix_diag_part(input, k = (-1, 2), align="LEFT_RIGHT")
==> [[[3, 8, 0], # Output shape: (2, 4, 3)
[2, 7, 6],
[1, 6, 7],
[0, 5, 8]],
[[3, 4, 0],
[4, 3, 8],
[5, 2, 7],
[0, 1, 6]]]
# max_diag_len can be shorter than the main diagonal.
tf.matrix_diag_part(input, k = (-2, -1))
==> [[[5, 8],
[9, 0]],
[[1, 6],
[5, 0]]]
# padding_value = 9
tf.matrix_diag_part(input, k = (1, 3), padding_value = 9)
==> [[[9, 9, 4], # Output shape: (2, 3, 3)
[9, 3, 8],
[2, 7, 6]],
[[9, 9, 2],
[9, 3, 4],
[4, 3, 8]]]
Clases anidadas
clase | MatrixDiagPartV3.Opciones | Atributos opcionales para MatrixDiagPartV3 |
Métodos públicos
estático MatrixDiagPartV3.Options | alinear (alineación de cadena) |
Salida <T> | como salida () Devuelve el identificador simbólico de un tensor. |
estático <T> MatrixDiagPartV3 <T> | |
Salida <T> | diagonal () Las diagonales extraídas. |
Métodos Heredados
Métodos públicos
MatrixDiagPartV3.Options estático público alineado (alineación de cadena)
Parámetros
alinear | Algunas diagonales son más cortas que `max_diag_len` y deben rellenarse. `align` es una cadena que especifica cómo deben alinearse las superdiagonales y las subdiagonales, respectivamente. Hay cuatro alineaciones posibles: "DERECHA_IZQUIERDA" (predeterminada), "IZQUIERDA_DERECHA", "IZQUIERDA_IZQUIERDA" y "DERECHA_DERECHA". "RIGHT_LEFT" alinea las superdiagonales a la derecha (rellena la fila a la izquierda) y las subdiagonales a la izquierda (rellena la fila a la derecha). Es el formato de empaque que utiliza LAPACK. cuSPARSE usa "LEFT_RIGHT", que es la alineación opuesta. |
---|
salida pública <T> como salida ()
Devuelve el identificador simbólico de un tensor.
Las entradas de las operaciones de TensorFlow son salidas de otra operación de TensorFlow. Este método se utiliza para obtener un identificador simbólico que representa el cálculo de la entrada.
public static MatrixDiagPartV3 <T> create ( Scope scope, Operand <T> input, Operand <Integer> k, Operand <T> paddingValue, Options... options)
Método de fábrica para crear una clase que envuelve una nueva operación MatrixDiagPartV3.
Parámetros
alcance | alcance actual |
---|---|
aporte | Tensor de rango `r` donde `r >= 2`. |
k | Desplazamiento(s) diagonal(es). Un valor positivo significa superdiagonal, 0 se refiere a la diagonal principal y un valor negativo significa subdiagonales. `k` puede ser un solo número entero (para una sola diagonal) o un par de números enteros que especifican los extremos inferior y superior de una banda de matriz. `k[0]` no debe ser mayor que `k[1]`. |
valor de relleno | El valor con el que rellenar el área fuera de la banda diagonal especificada. El valor predeterminado es 0. |
opciones | lleva valores de atributos opcionales |
Devoluciones
- una nueva instancia de MatrixDiagPartV3