スパース行列は、2 つの CSR 行列「a」と「b」を乗算します。
スパース行列 'a' とスパース行列 'b' の行列乗算を実行します。 'a' または 'b' が転置または隣接していない限り、スパース行列 'a * b' を返します。
各行列は、ブールパラメータ「transpose_a」、「adjoint_a」、「transpose_b」、および「adjoint_b」に従って転置または随伴(共役および転置)できます。 `transpose_a` または `adjoint_a` の最大でも 1 つが True になります。同様に、`transpose_b` または `adjoint_b` の最大 1 つが True になる可能性があります。
入力は互換性のある形状を持っている必要があります。つまり、「a」の内側の寸法は「b」の外側の寸法と等しくなければなりません。この要件は、「a」または「b」のいずれかが転置されるか隣接されるかに応じて調整されます。
「type」パラメータは行列要素のタイプを示します。 `a` と `b` は両方とも同じ型でなければなりません。サポートされている型は、`float32`、`float64`、`complex64`、および `complex128` です。
「a」と「b」は両方とも同じランクでなければなりません。ブロードキャストはサポートされていません。ランク 3 の場合、「a」と「b」内の 2D CSRSparseMatrices の各バッチは同じ密な形状を持つ必要があります。
スパース行列積には、数値 (非構造) ゼロが含まれる場合があります。 TODO(anudhyan): ゼロを削除するかどうかを制御するブール属性を追加することを検討してください。
使用例:
from tensorflow.python.ops.linalg.sparse import sparse_csr_matrix_ops
a_indices = np.array([[0, 0], [2, 3], [2, 4], [3, 0]])
a_values = np.array([1.0, 5.0, -1.0, -2.0], np.float32)
a_dense_shape = [4, 5]
b_indices = np.array([[0, 0], [3, 0], [3, 1]])
b_values = np.array([2.0, 7.0, 8.0], np.float32)
b_dense_shape = [5, 3]
with tf.Session() as sess:
# Define (COO format) Sparse Tensors over Numpy arrays
a_st = tf.sparse.SparseTensor(a_indices, a_values, a_dense_shape)
b_st = tf.sparse.SparseTensor(b_indices, b_values, b_dense_shape)
# Convert SparseTensors to CSR SparseMatrix
a_sm = sparse_csr_matrix_ops.sparse_tensor_to_csr_sparse_matrix(
a_st.indices, a_st.values, a_st.dense_shape)
b_sm = sparse_csr_matrix_ops.sparse_tensor_to_csr_sparse_matrix(
b_st.indices, b_st.values, b_st.dense_shape)
# Compute the CSR SparseMatrix matrix multiplication
c_sm = sparse_csr_matrix_ops.sparse_matrix_sparse_mat_mul(
a=a_sm, b=b_sm, type=tf.float32)
# Convert the CSR SparseMatrix product to a dense Tensor
c_sm_dense = sparse_csr_matrix_ops.csr_sparse_matrix_to_dense(
c_sm, tf.float32)
# Evaluate the dense Tensor value
c_sm_dense_value = sess.run(c_sm_dense)
`c_sm_dense_value` には密行列積が格納されます。 [[ 2. 0. 0.]
[ 0. 0. 0.]
[ 35. 40. 0.]
[ -4. 0. 0.]]
a: `CSRSparseMatrix`。 b: `a` と同じタイプおよびランクを持つ `CSRSparseMatrix`。 type: `a` と `b` の両方の型。 transpose_a: True の場合、乗算の前に 'a' が転置されます。 transpose_b: True の場合、乗算の前に「b」が転置されます。 adjoint_a: True の場合、乗算の前に 'a' が隣接します。 adjoint_b: True の場合、乗算の前に「b」が隣接します。 ネストされたクラス
クラス | SparseMatrixSparseMatMul.オプション | SparseMatrixSparseMatMul のオプションの属性 |
パブリックメソッド
静的SparseMatrixSparseMatMul.Options | adjointA (ブール型 adjointA) |
静的SparseMatrixSparseMatMul.Options | adjointB (ブール型 adjointB) |
出力<オブジェクト> | asOutput () テンソルのシンボリック ハンドルを返します。 |
出力<?> | c () CSRSparseMatrix。 |
静的 <T> SparseMatrixSparseMatMul | |
静的SparseMatrixSparseMatMul.Options | transposeA (ブールtransposeA) |
静的SparseMatrixSparseMatMul.Options | transposeB (ブールtransposeB) |
継承されたメソッド
パブリックメソッド
public static SparseMatrixSparseMatMul.Options adjointA (ブール型 adjointA)
パラメータ
随伴A | 「a」を共役転置するかどうかを示します。 |
---|
public static SparseMatrixSparseMatMul.Options adjointB (ブール型 adjointB)
パラメータ
随伴B | 「b」を共役転置するかどうかを示します。 |
---|
public Output <オブジェクト> asOutput ()
テンソルのシンボリック ハンドルを返します。
TensorFlow オペレーションへの入力は、別の TensorFlow オペレーションの出力です。このメソッドは、入力の計算を表すシンボリック ハンドルを取得するために使用されます。
public static SparseMatrixSparseMatMul create (スコープスコープ、オペランド<?> a、オペランド<?> b、Class<T> タイプ、オプション...オプション)
新しい SparseMatrixSparseMatMul オペレーションをラップするクラスを作成するファクトリ メソッド。
パラメータ
範囲 | 現在のスコープ |
---|---|
ある | CSRSparseMatrix。 |
b | CSRSparseMatrix。 |
オプション | オプションの属性値を持ちます |
返品
- SparseMatrixSparseMatMul の新しいインスタンス
public static SparseMatrixSparseMatMul.Options transposeA (ブール transposeA)
パラメータ
トランスポーズA | 「a」を転置するかどうかを示します。 |
---|
public static SparseMatrixSparseMatMul.Options transposeB (ブール transposeB)
パラメータ
トランスポーズB | 「b」を転置するかどうかを示します。 |
---|