指定されたバッチ対角値を持つバッチ対角テンソルを返します。
`diagonal`の内容が行列の` k [0] `番目から` k [1] `番目の対角線であり、他のすべてが` padding`で埋められているテンソルを返します。 `num_rows`と` num_cols`は、出力の最も内側の行列の次元を指定します。両方が指定されていない場合、opは最も内側の行列が正方行列であると想定し、そのサイズを「k」と「対角」の最も内側の次元から推測します。それらの1つだけが指定されている場合、opは、指定されていない値が他の基準に基づいて可能な限り小さいと見なします。
`対角`に `r`次元` [I、J、...、L、M、N] `を持たせます。出力テンソルは、対角線が1つだけ指定されている場合( `k`は整数、または` k [0] == k [1] `)。それ以外の場合は、ランクが「r」で、形状が「[I、J、...、L、num_rows、num_cols]」になります。
`対角`の2番目に内側の次元には二重の意味があります。 `k`がスカラーまたは` k [0] == k [1] `の場合、` M`はバッチサイズ[I、J、...、M]の一部であり、出力テンソルは次のとおりです。 `M`は、同じバッチ内の行列の対角線の数として扱われ(` M = k [1] -k [0] + 1`)、出力テンソルは次のとおりです。 、 `diag_index = [k] -d`、および` index_in_diag = n-max(d、0)+ offset`。
対角線の配置が右にある場合を除いて、 `offset`はゼロです。
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
}
ここで、 `diag_len(d)= min(cols --max(d、0)、rows + min(d、0))`。例:
# 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]]
ネストされたクラス
クラス | MatrixDiagV3.Options | MatrixDiagV3 オプションの属性 |
パブリックメソッド
静的MatrixDiagV3.Options | align (文字列整列) |
出力<T> | asOutput () テンソルのシンボリックハンドルを返します。 |
static <T> MatrixDiagV3 <T> | |
出力<T> | 出力() `k`が整数の場合はランク` r + 1`、それ以外の場合はランク `r`を持ちます。 |
継承されたメソッド
パブリックメソッド
public static MatrixDiagV3.Options align (String align)
パラメーター
整列 | 一部の対角線は `max_diag_len`よりも短く、パディングする必要があります。 `align`は、スーパーダイアゴナルとサブダイアゴナルをそれぞれどのように整列させるかを指定する文字列です。可能な配置には、「RIGHT_LEFT」(デフォルト)、「LEFT_RIGHT」、「LEFT_LEFT」、および「RIGHT_RIGHT」の4つがあります。 「RIGHT_LEFT」は、スーパーダイアゴナルを右に揃え(行を左にパディング)、サブダイアゴナルを左に揃えます(右に行をパディングします)。 LAPACKが使用するパッキングフォーマットです。 cuSPARSEは、反対の配置である「LEFT_RIGHT」を使用します。 |
---|
public Output <T> asOutput ()
テンソルのシンボリックハンドルを返します。
TensorFlow操作への入力は、別のTensorFlow操作の出力です。このメソッドは、入力の計算を表すシンボリックハンドルを取得するために使用されます。
public static MatrixDiagV3 <T> create (スコープスコープ、オペランド<T>対角線、オペランド<整数> k、オペランド<整数> numRows、オペランド<整数> numCols、オペランド<T> paddingValue、オプション...オプション)
新しいMatrixDiagV3操作をラップするクラスを作成するファクトリメソッド。
パラメーター
範囲 | 現在のスコープ |
---|---|
対角線 | ランク `r`、ここで` r> = 1` |
k | 対角オフセット。正の値は超対角を意味し、0は主対角を示し、負の値は副対角を意味します。 `k`は、単一の整数(単一の対角線の場合)または行列バンドの下限と上限を指定する整数のペアにすることができます。 `k [0]`は `k [1]`より大きくてはいけません。 |
numRows | 出力行列の行数。提供されていない場合、opは出力行列が正方行列であると想定し、kと「対角」の最も内側の次元から行列サイズを推測します。 |
numCols | 出力行列の列数。提供されていない場合、opは出力行列が正方行列であると想定し、kと「対角」の最も内側の次元から行列サイズを推測します。 |
paddingValue | 指定された対角帯の外側の領域を埋める番号。デフォルトは0です。 |
オプション | オプションの属性値を運ぶ |
戻り値
- MatrixDiagV3の新しいインスタンス