MatrixSetDiag

clase final pública MatrixSetDiag

Devuelve un tensor matricial por lotes con nuevos valores diagonales por lotes.

Dadas "entrada" y "diagonal", esta operación devuelve un tensor con la misma forma y valores que "entrada", excepto por las diagonales especificadas de las matrices más internas. Estos serán sobrescritos por los valores en "diagonal".

`entrada` tiene dimensiones `r+1` `[I, J, ..., L, M, N]`. Cuando `k` es escalar o `k[0] == k[1]`, `diagonal` tiene dimensiones `r` `[I, J, ..., L, max_diag_len]`. De lo contrario, tiene dimensiones `r+1` `[I, J, ..., L, num_diags, max_diag_len]`. `num_diags` es el número de diagonales, `num_diags = k[1] - k[0] + 1`. `max_diag_len` es la diagonal más larga en el rango `[k[0], k[1]]`, `max_diag_len = min(M + min(k[1], 0), N + min(-k[0] , 0))`

La salida es un tensor de rango `k+1` con dimensiones `[I, J, ..., L, M, N]`. Si `k` es escalar 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
 
De lo contrario,
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
 
donde `d = n - m`, `diag_index = k[1] - d` y `index_in_diag = n - max(d, 0) + offset`.

El "desplazamiento" es cero, excepto cuando la alineación de la diagonal es hacia 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))`.

Por ejemplo:

# 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]]]
 
 

Clases anidadas

clase MatrixSetDiag.Opciones Atributos opcionales para MatrixSetDiag

Constantes

Cadena OP_NOMBRE El nombre de esta operación, como lo conoce el motor central de TensorFlow.

Métodos públicos

MatrixSetDiag.Options estático
alinear (alinear cadenas)
Salida <T>
como salida ()
Devuelve el identificador simbólico del tensor.
estático <T extiende TType > MatrixSetDiag <T>
crear (alcance alcance , entrada del operando <T>, diagonal del operando <T>, operando <TInt32> k, opciones... opciones)
Método de fábrica para crear una clase que envuelve una nueva operación MatrixSetDiag.
Salida <T>
producción ()
Clasifique `r+1`, con `output.shape = input.shape`.

Métodos heredados

Constantes

Cadena final estática pública OP_NAME

El nombre de esta operación, como lo conoce el motor central de TensorFlow.

Valor constante: "MatrixSetDiagV3"

Métodos públicos

Alineación pública estática MatrixSetDiag.Options (alineación de cadenas)

Parámetros
alinear Algunas diagonales son más cortas que `max_diag_len` y es necesario rellenarlas. `align` es una cadena que especifica cómo se deben alinear las superdiagonales y subdiagonales, respectivamente. Hay cuatro alineaciones posibles: "RIGHT_LEFT" (predeterminado), "LEFT_RIGHT", "LEFT_LEFT" y "RIGHT_RIGHT". "RIGHT_LEFT" alinea las superdiagonales a la derecha (rellena la fila con la izquierda) y las subdiagonales a la izquierda (rellena la fila con la derecha). Es el formato de embalaje que utiliza LAPACK. cuSPARSE usa "LEFT_RIGHT", que es la alineación opuesta.

Salida pública <T> como Salida ()

Devuelve el identificador simbólico del tensor.

Las entradas a 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.

creación pública estática de MatrixSetDiag <T> ( alcance del alcance, entrada del operando <T>, diagonal del operando <T>, operando <TInt32> k, opciones... opciones)

Método de fábrica para crear una clase que envuelve una nueva operación MatrixSetDiag.

Parámetros
alcance alcance actual
aporte Rango `r+1`, donde `r >= 1`.
diagonal Clasifica `r` cuando `k` es un número entero o `k[0] == k[1]`. De lo contrario, tiene rango "r+1". `k>= 1`.
k Desplazamientos diagonales. El valor positivo significa superdiagonal, 0 se refiere a la diagonal principal y el valor negativo significa subdiagonales. `k` puede ser un único número entero (para una única 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]`.
opciones lleva valores de atributos opcionales
Devoluciones
  • una nueva instancia de MatrixSetDiag

Salida pública <T> salida ()

Clasifique `r+1`, con `output.shape = input.shape`.