dòng chảy :: hoạt động :: MatrixDiagV3
#include <array_ops.h>
Trả về tensor đường chéo theo lô với các giá trị đường chéo theo lô đã cho.
Tóm lược
Trả về một tensor có nội dung diagonal
là k[0]
-th đến k[1]
-th đường chéo của ma trận, với mọi thứ khác được đệm bằng khoảng padding
. num_rows
và num_cols
xác định kích thước của ma trận trong cùng của đầu ra. Nếu cả hai đều không được chỉ định, op giả sử ma trận trong cùng là hình vuông và suy ra kích thước của nó từ k
và kích thước trong cùng của diagonal
. Nếu chỉ một trong số chúng được chỉ định, op giả định giá trị không xác định là giá trị nhỏ nhất có thể dựa trên các tiêu chí khác.
Cho diagonal
có r
kích thước [I, J, ..., L, M, N]
. Tensor đầu ra có thứ hạng r+1
với hình dạng [I, J, ..., L, M, num_rows, num_cols]
khi chỉ cho một đường chéo ( k
là số nguyên hoặc k[0] == k[1]
) . Nếu không, nó có thứ hạng r
với hình dạng [I, J, ..., L, num_rows, num_cols]
.
Kích thước trong cùng thứ hai của diagonal
có ý nghĩa kép. Khi k
là vô hướng hoặc k[0] == k[1]
, M
là một phần của kích thước lô [I, J, ..., M] và tensor đầu ra là:
output[i, j, ..., l, m, n] = diagonal[i, j, ..., l, n-max(d_upper, 0)] ; if n - m == d_upper padding_value ; otherwise
Nếu không, M
được coi là số đường chéo của ma trận trong cùng một lô ( M = k[1]-k[0]+1
), và tensor đầu ra là:
output[i, j, ..., l, m, n] = diagonal[i, j, ..., l, diag_index, index_in_diag] ; if k[0] <= d <= k[1] padding_value ; otherwisetrong đó
d = n - m
, diag_index = [k] - d
và index_in_diag = n - max(d, 0) + offset
. offset
bằng 0 ngoại trừ khi căn chỉnh của đường chéo ở bên phải.
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 ; otherwisetrong đó
diag_len(d) = min(cols - max(d, 0), rows + min(d, 0))
.Ví dụ:
# 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 tridiagonal band (per batch). diagonals = np.array([[[0, 8, 9], # Input shape: (2, 2, 3) [1, 2, 3], [4, 5, 0]], [[0, 2, 3], [6, 7, 9], [9, 1, 0]]]) tf.matrix_diag(diagonals, k = (-1, 1)) ==> [[[1, 8, 0], # Output shape: (2, 3, 3) [4, 2, 9], [0, 5, 3]], [[6, 2, 0], [9, 7, 3], [0, 1, 9]]]
# LEFT_RIGHT alignment. diagonals = np.array([[[8, 9, 0], # Input shape: (2, 2, 3) [1, 2, 3], [0, 4, 5]], [[2, 3, 0], [6, 7, 9], [0, 9, 1]]]) tf.matrix_diag(diagonals, k = (-1, 1), align="LEFT_RIGHT") ==> [[[1, 8, 0], # Output shape: (2, 3, 3) [4, 2, 9], [0, 5, 3]], [[6, 2, 0], [9, 7, 3], [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]]
Arguments:
- scope: A Scope object
- diagonal: Rank
r
, wherer >= 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 thank[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.
Optional attributes (see Attrs
):
- align: Some diagonals are shorter than
max_diag_len
and need to be padded.align
is a string specifying how superdiagonals and subdiagonals should be aligned, respectively. There are four possible alignments: "RIGHT_LEFT" (default), "LEFT_RIGHT", "LEFT_LEFT", and "RIGHT_RIGHT". "RIGHT_LEFT" aligns superdiagonals to the right (left-pads the row) and subdiagonals to the left (right-pads the row). It is the packing format LAPACK uses. cuSPARSE uses "LEFT_RIGHT", which is the opposite alignment.
Returns:
Output
: Has rankr+1
whenk
is an integer ork[0] == k[1]
, rankr
otherwise.
Constructors and Destructors |
|
---|---|
MatrixDiagV3(const ::tensorflow::Scope & scope, ::tensorflow::Input diagonal, ::tensorflow::Input k, ::tensorflow::Input num_rows, ::tensorflow::Input num_cols, ::tensorflow::Input padding_value)
|
|
MatrixDiagV3(const ::tensorflow::Scope & scope, ::tensorflow::Input diagonal, ::tensorflow::Input k, ::tensorflow::Input num_rows, ::tensorflow::Input num_cols, ::tensorflow::Input padding_value, const MatrixDiagV3::Attrs & attrs)
|
Public attributes |
|
---|---|
operation
|
|
output
|
Public functions |
|
---|---|
node() const
|
::tensorflow::Node *
|
operator::tensorflow::Input() const
|
|
operator::tensorflow::Output() const
|
|
Public static functions |
|
---|---|
Align(StringPiece x)
|
Structs |
|
---|---|
tensorflow:: |
Optional attribute setters for MatrixDiagV3. |
Public attributes
operation
Operation operation
đầu ra
::tensorflow::Output output
Chức năng công cộng
MatrixDiagV3
MatrixDiagV3( const ::tensorflow::Scope & scope, ::tensorflow::Input diagonal, ::tensorflow::Input k, ::tensorflow::Input num_rows, ::tensorflow::Input num_cols, ::tensorflow::Input padding_value )
MatrixDiagV3
MatrixDiagV3( const ::tensorflow::Scope & scope, ::tensorflow::Input diagonal, ::tensorflow::Input k, ::tensorflow::Input num_rows, ::tensorflow::Input num_cols, ::tensorflow::Input padding_value, const MatrixDiagV3::Attrs & attrs )
nút
::tensorflow::Node * node() const
toán tử :: tensorflow :: Đầu vào
operator::tensorflow::Input() const
toán tử :: tensorflow :: Đầu ra
operator::tensorflow::Output() const
Các chức năng tĩnh công khai
Căn chỉnh
Attrs Align( StringPiece x )