Copy a tensor setting everything outside a central band in each innermost matrix to zero.
tf.linalg.band_part(
input: _atypes.TensorFuzzingAnnotation[TV_MatrixBandPart_T],
num_lower: _atypes.TensorFuzzingAnnotation[TV_MatrixBandPart_Tindex],
num_upper: _atypes.TensorFuzzingAnnotation[TV_MatrixBandPart_Tindex],
name=None
) -> _atypes.TensorFuzzingAnnotation[TV_MatrixBandPart_T]
The band
part is computed as follows:
Assume input
has k
dimensions [I, J, K, ..., M, N]
, then the output is a
tensor with the same shape where
band[i, j, k, ..., m, n] = in_band(m, n) * input[i, j, k, ..., m, n]
.
The indicator function
in_band(m, n) = (num_lower < 0 || (m-n) <= num_lower)) &&
(num_upper < 0 || (n-m) <= num_upper)
.
For example:
# if 'input' is [[ 0, 1, 2, 3]
# [-1, 0, 1, 2]
# [-2, -1, 0, 1]
# [-3, -2, -1, 0]],
tf.linalg.band_part(input, 1, -1) ==> [[ 0, 1, 2, 3]
[-1, 0, 1, 2]
[ 0, -1, 0, 1]
[ 0, 0, -1, 0]],
tf.linalg.band_part(input, 2, 1) ==> [[ 0, 1, 0, 0]
[-1, 0, 1, 0]
[-2, -1, 0, 1]
[ 0, -2, -1, 0]]
Useful special cases:
tf.linalg.band_part(input, 0, -1) ==> Upper triangular part.
tf.linalg.band_part(input, -1, 0) ==> Lower triangular part.
tf.linalg.band_part(input, 0, 0) ==> Diagonal.
Returns | |
---|---|
A Tensor . Has the same type as input .
|