Stay organized with collections
Save and categorize content based on your preferences.
tensorflow::
ops::
MatrixDiagV2
#include <array_ops.h>
Returns a batched diagonal tensor with given batched diagonal values.
Summary
Returns a tensor with the contents in
diagonal
as
k[0]
-th to
k[1]
-th diagonals of a matrix, with everything else padded with
padding
.
num_rows
and
num_cols
specify the dimension of the innermost matrix of the output. If both are not specified, the op assumes the innermost matrix is square and infers its size from
k
and the innermost dimension of
diagonal
. If only one of them is specified, the op assumes the unspecified value is the smallest possible based on other criteria.
Let
diagonal
have
r
dimensions
[I, J, ..., L, M, N]
. The output tensor has rank
r+1
with shape
[I, J, ..., L, M, num_rows, num_cols]
when only one diagonal is given (
k
is an integer or
k[0] == k[1]
). Otherwise, it has rank
r
with shape
[I, J, ..., L, num_rows, num_cols]
.
The second innermost dimension of
diagonal
has double meaning. When
k
is scalar or
k[0] == k[1]
,
M
is part of the batch size [I, J, ..., M], and the output tensor is:
output[i, j, ..., l, m, n]
= diagonal[i, j, ..., l, n-max(d_upper, 0)] ; if n - m == d_upper
padding_value ; otherwise
Otherwise,
M
is treated as the number of diagonals for the matrix in the same batch (
M = k[1]-k[0]+1
), and the output tensor is:
output[i, j, ..., l, m, n]
= diagonal[i, j, ..., l, diag_index, index_in_diag] ; if k[0] <= d <= k[1]
padding_value ; otherwise
where
d = n - m
,
diag_index = k[1] - d
, and
index_in_diag = n - max(d, 0)
.
For example:
# The main diagonal.
diagonal = np.array([[1, 2, 3, 4], # Input shape: (2, 4)
[5, 6, 7, 8]])
tf.matrix_diag(diagonal) ==> [[[1, 0, 0, 0], # Output shape: (2, 4, 4)
[0, 2, 0, 0],
[0, 0, 3, 0],
[0, 0, 0, 4]],
[[5, 0, 0, 0],
[0, 6, 0, 0],
[0, 0, 7, 0],
[0, 0, 0, 8]]]
# A superdiagonal (per batch).
diagonal = np.array([[1, 2, 3], # Input shape: (2, 3)
[4, 5, 6]])
tf.matrix_diag(diagonal, k = 1)
==> [[[0, 1, 0, 0], # Output shape: (2, 4, 4)
[0, 0, 2, 0],
[0, 0, 0, 3],
[0, 0, 0, 0]],
[[0, 4, 0, 0],
[0, 0, 5, 0],
[0, 0, 0, 6],
[0, 0, 0, 0]]]
# A band of diagonals.
diagonals = np.array([[[1, 2, 3], # Input shape: (2, 2, 3)
[4, 5, 0]],
[[6, 7, 9],
[9, 1, 0]]])
tf.matrix_diag(diagonals, k = (-1, 0))
==> [[[1, 0, 0], # Output shape: (2, 3, 3)
[4, 2, 0],
[0, 5, 3]],
[[6, 0, 0],
[9, 7, 0],
[0, 1, 9]]]
# Rectangular matrix.
diagonal = np.array([1, 2]) # Input shape: (2)
tf.matrix_diag(diagonal, k = -1, num_rows = 3, num_cols = 4)
==> [[0, 0, 0, 0], # Output shape: (3, 4)
[1, 0, 0, 0],
[0, 2, 0, 0]]
# Rectangular matrix with inferred num_cols and padding_value = 9.
tf.matrix_diag(diagonal, k = -1, num_rows = 3, padding_value = 9)
==> [[9, 9], # Output shape: (3, 2)
[1, 9],
[9, 2]]
Args:
-
scope: A
Scope
object
-
diagonal: Rank
r
, where
r >= 1
-
k: Diagonal offset(s). Positive value means superdiagonal, 0 refers to the main diagonal, and negative value means subdiagonals.
k
can be a single integer (for a single diagonal) or a pair of integers specifying the low and high ends of a matrix band.
k[0]
must not be larger than
k[1]
.
-
num_rows: The number of rows of the output matrix. If it is not provided, the op assumes the output matrix is a square matrix and infers the matrix size from k and the innermost dimension of
diagonal
.
-
num_cols: The number of columns of the output matrix. If it is not provided, the op assumes the output matrix is a square matrix and infers the matrix size from k and the innermost dimension of
diagonal
.
-
padding_value: The number to fill the area outside the specified diagonal band with. Default is 0.
Returns:
-
Output
: Has rank
r+1
when
k
is an integer or
k[0] == k[1]
, rank
r
otherwise.
Public attributes
Public functions
node
::tensorflow::Node * node() const
operator::tensorflow::Input() const
operator::tensorflow::Output
operator::tensorflow::Output() const
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates. Some content is licensed under the numpy license.
Last updated 2021-08-16 UTC.
[null,null,["Last updated 2021-08-16 UTC."],[],[],null,["# tensorflow::ops::MatrixDiagV2 Class Reference\n\ntensorflow::\nops::\nMatrixDiagV2\n===============================\n\n`\n#include \u003carray_ops.h\u003e\n`\n\n\nReturns a batched diagonal tensor with given batched diagonal values.\n\nSummary\n-------\n\n\nReturns a tensor with the contents in\n`\ndiagonal\n`\nas\n`\nk[0]\n`\n-th to\n`\nk[1]\n`\n-th diagonals of a matrix, with everything else padded with\n`\npadding\n`\n.\n`\nnum_rows\n`\nand\n`\nnum_cols\n`\nspecify the dimension of the innermost matrix of the output. If both are not specified, the op assumes the innermost matrix is square and infers its size from\n`\nk\n`\nand the innermost dimension of\n`\ndiagonal\n`\n. If only one of them is specified, the op assumes the unspecified value is the smallest possible based on other criteria.\n\n\nLet\n`\ndiagonal\n`\nhave\n`\nr\n`\ndimensions\n`\n[I, J, ..., L, M, N]\n`\n. The output tensor has rank\n`\nr+1\n`\nwith shape\n`\n[I, J, ..., L, M, num_rows, num_cols]\n`\nwhen only one diagonal is given (\n`\nk\n`\nis an integer or\n`\nk[0] == k[1]\n`\n). Otherwise, it has rank\n`\nr\n`\nwith shape\n`\n[I, J, ..., L, num_rows, num_cols]\n`\n.\n\n\nThe second innermost dimension of\n`\ndiagonal\n`\nhas double meaning. When\n`\nk\n`\nis scalar or\n`\nk[0] == k[1]\n`\n,\n`\nM\n`\nis part of the batch size \\[I, J, ..., M\\], and the output tensor is:\n\n\n```scdoc\noutput[i, j, ..., l, m, n]\n = diagonal[i, j, ..., l, n-max(d_upper, 0)] ; if n - m == d_upper\n padding_value ; otherwise\n```\n\n\u003cbr /\u003e\n\n\nOtherwise,\n`\nM\n`\nis treated as the number of diagonals for the matrix in the same batch (\n`\nM = k[1]-k[0]+1\n`\n), and the output tensor is:\n\n\n```scdoc\noutput[i, j, ..., l, m, n]\n = diagonal[i, j, ..., l, diag_index, index_in_diag] ; if k[0] \u003c= d \u003c= k[1]\n padding_value ; otherwise\n```\nwhere `\nd = n - m\n` , `\ndiag_index = k[1] - d\n` , and `\nindex_in_diag = n - max(d, 0)\n` .\n\n\u003cbr /\u003e\n\n\nFor example:\n\n\n```scdoc\n# The main diagonal.\ndiagonal = np.array([[1, 2, 3, 4], # Input shape: (2, 4)\n [5, 6, 7, 8]])\ntf.matrix_diag(diagonal) ==\u003e [[[1, 0, 0, 0], # Output shape: (2, 4, 4)\n [0, 2, 0, 0],\n [0, 0, 3, 0],\n [0, 0, 0, 4]],\n [[5, 0, 0, 0],\n [0, 6, 0, 0],\n [0, 0, 7, 0],\n [0, 0, 0, 8]]]\n```\n\n\u003cbr /\u003e\n\n\n```scdoc\n# A superdiagonal (per batch).\ndiagonal = np.array([[1, 2, 3], # Input shape: (2, 3)\n [4, 5, 6]])\ntf.matrix_diag(diagonal, k = 1)\n ==\u003e [[[0, 1, 0, 0], # Output shape: (2, 4, 4)\n [0, 0, 2, 0],\n [0, 0, 0, 3],\n [0, 0, 0, 0]],\n [[0, 4, 0, 0],\n [0, 0, 5, 0],\n [0, 0, 0, 6],\n [0, 0, 0, 0]]]\n```\n\n\u003cbr /\u003e\n\n\n```scdoc\n# A band of diagonals.\ndiagonals = np.array([[[1, 2, 3], # Input shape: (2, 2, 3)\n [4, 5, 0]],\n [[6, 7, 9],\n [9, 1, 0]]])\ntf.matrix_diag(diagonals, k = (-1, 0))\n ==\u003e [[[1, 0, 0], # Output shape: (2, 3, 3)\n [4, 2, 0],\n [0, 5, 3]],\n [[6, 0, 0],\n [9, 7, 0],\n [0, 1, 9]]]\n```\n\n\u003cbr /\u003e\n\n\n```scdoc\n# Rectangular matrix.\ndiagonal = np.array([1, 2]) # Input shape: (2)\ntf.matrix_diag(diagonal, k = -1, num_rows = 3, num_cols = 4)\n ==\u003e [[0, 0, 0, 0], # Output shape: (3, 4)\n [1, 0, 0, 0],\n [0, 2, 0, 0]]\n```\n\n\u003cbr /\u003e\n\n\n```scdoc\n# Rectangular matrix with inferred num_cols and padding_value = 9.\ntf.matrix_diag(diagonal, k = -1, num_rows = 3, padding_value = 9)\n ==\u003e [[9, 9], # Output shape: (3, 2)\n [1, 9],\n [9, 2]]\n```\n\n\u003cbr /\u003e\n\n\nArgs:\n\n- scope: A [Scope](/versions/r2.6/api_docs/cc/class/tensorflow/scope#classtensorflow_1_1_scope) object\n- diagonal: Rank `\n r\n ` , where `\n r \u003e= 1\n `\n- k: Diagonal offset(s). Positive value means superdiagonal, 0 refers to the main diagonal, and negative value means subdiagonals. `\n k\n ` can be a single integer (for a single diagonal) or a pair of integers specifying the low and high ends of a matrix band. `\n k[0]\n ` must not be larger than `\n k[1]\n ` .\n- num_rows: The number of rows of the output matrix. If it is not provided, the op assumes the output matrix is a square matrix and infers the matrix size from k and the innermost dimension of `\n diagonal\n ` .\n- num_cols: The number of columns of the output matrix. If it is not provided, the op assumes the output matrix is a square matrix and infers the matrix size from k and the innermost dimension of `\n diagonal\n ` .\n- padding_value: The number to fill the area outside the specified diagonal band with. Default is 0.\n\n\u003cbr /\u003e\n\n\nReturns:\n\n- `\n `[Output](/versions/r2.6/api_docs/cc/class/tensorflow/output#classtensorflow_1_1_output)`\n ` : Has rank `\n r+1\n ` when `\n k\n ` is an integer or `\n k[0] == k[1]\n ` , rank `\n r\n ` otherwise.\n\n\u003cbr /\u003e\n\n| ### Constructors and Destructors ||\n|---|---|\n| ` `[MatrixDiagV2](#classtensorflow_1_1ops_1_1_matrix_diag_v2_1a0f4757e436efeaed1ba2bd9690367b7f)` (const :: `[tensorflow::Scope](/versions/r2.6/api_docs/cc/class/tensorflow/scope#classtensorflow_1_1_scope)` & scope, :: `[tensorflow::Input](/versions/r2.6/api_docs/cc/class/tensorflow/input#classtensorflow_1_1_input)` diagonal, :: `[tensorflow::Input](/versions/r2.6/api_docs/cc/class/tensorflow/input#classtensorflow_1_1_input)` k, :: `[tensorflow::Input](/versions/r2.6/api_docs/cc/class/tensorflow/input#classtensorflow_1_1_input)` num_rows, :: `[tensorflow::Input](/versions/r2.6/api_docs/cc/class/tensorflow/input#classtensorflow_1_1_input)` num_cols, :: `[tensorflow::Input](/versions/r2.6/api_docs/cc/class/tensorflow/input#classtensorflow_1_1_input)` padding_value) ` ||\n\n| ### Public attributes ||\n|--------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|\n| ` `[operation](#classtensorflow_1_1ops_1_1_matrix_diag_v2_1a09bb44acf7362d90e9b70dfaa3ebd8fd)` ` | ` `[Operation](/versions/r2.6/api_docs/cc/class/tensorflow/operation#classtensorflow_1_1_operation)` ` |\n| ` `[output](#classtensorflow_1_1ops_1_1_matrix_diag_v2_1a180f0e2069ba614f9a8bf4593d6b322a)` ` | ` :: `[tensorflow::Output](/versions/r2.6/api_docs/cc/class/tensorflow/output#classtensorflow_1_1_output)` ` |\n\n| ### Public functions ||\n|------------------------------------------------------------------------------------------------------------------------------|--------------------------|\n| ` `[node](#classtensorflow_1_1ops_1_1_matrix_diag_v2_1a5faf264fc6c643dfc49d1d5b00828973)` () const ` | ` ::tensorflow::Node * ` |\n| ` `[operator::tensorflow::Input](#classtensorflow_1_1ops_1_1_matrix_diag_v2_1a8301ec1ffa503e41034e06b9fc8dfd93)` () const ` | ` ` |\n| ` `[operator::tensorflow::Output](#classtensorflow_1_1ops_1_1_matrix_diag_v2_1a96f20bc6c061cadeeb30e3986311fc2c)` () const ` | ` ` |\n\nPublic attributes\n-----------------\n\n### operation\n\n```text\nOperation operation\n``` \n\n### output\n\n```text\n::tensorflow::Output output\n``` \n\nPublic functions\n----------------\n\n### MatrixDiagV2\n\n```gdscript\n MatrixDiagV2(\n const ::tensorflow::Scope & scope,\n ::tensorflow::Input diagonal,\n ::tensorflow::Input k,\n ::tensorflow::Input num_rows,\n ::tensorflow::Input num_cols,\n ::tensorflow::Input padding_value\n)\n``` \n\n### node\n\n```gdscript\n::tensorflow::Node * node() const \n``` \n\n### operator::tensorflow::Input\n\n```gdscript\n operator::tensorflow::Input() const \n``` \n\n### operator::tensorflow::Output\n\n```gdscript\n operator::tensorflow::Output() const \n```"]]