public final class SparseMatrixSparseMatMul extends RawOp implements Operand<TType>
a
and b
.
Performs a matrix multiplication of a sparse matrix a
with a sparse matrix
b
; returns a sparse matrix a * b
, unless either a
or b
is transposed or
adjointed.
Each matrix may be transposed or adjointed (conjugated and transposed)
according to the Boolean parameters transpose_a
, adjoint_a
, transpose_b
and adjoint_b
. At most one of transpose_a
or adjoint_a
may be True.
Similarly, at most one of transpose_b
or adjoint_b
may be True.
The inputs must have compatible shapes. That is, the inner dimension of a
must be equal to the outer dimension of b
. This requirement is adjusted
according to whether either a
or b
is transposed or adjointed.
The type
parameter denotes the type of the matrix elements. Both a
and b
must have the same type. The supported types are: float32
, float64
,
complex64
and complex128
.
Both a
and b
must have the same rank. Broadcasting is not supported. If they
have rank 3, each batch of 2D CSRSparseMatrices within a
and b
must have the
same dense shape.
The sparse matrix product may have numeric (non-structural) zeros. TODO(anudhyan): Consider adding a boolean attribute to control whether to prune zeros.
Usage example:
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
stores the dense matrix product:
[[ 2. 0. 0.] [ 0. 0. 0.] [ 35. 40. 0.] [ -4. 0. 0.]]
a: A CSRSparseMatrix
.
b: A CSRSparseMatrix
with the same type and rank as a
.
type: The type of both a
and b
.
transpose_a: If True, a
transposed before multiplication.
transpose_b: If True, b
transposed before multiplication.
adjoint_a: If True, a
adjointed before multiplication.
adjoint_b: If True, b
adjointed before multiplication.
Modifier and Type | Class and Description |
---|---|
static class |
SparseMatrixSparseMatMul.Inputs |
static class |
SparseMatrixSparseMatMul.Options
Optional attributes for
SparseMatrixSparseMatMul |
Modifier and Type | Field and Description |
---|---|
static String |
OP_NAME
The name of this op, as known by TensorFlow core engine
|
Constructor and Description |
---|
SparseMatrixSparseMatMul(Operation operation) |
Modifier and Type | Method and Description |
---|---|
static SparseMatrixSparseMatMul.Options |
adjointA(Boolean adjointA)
Sets the adjointA option.
|
static SparseMatrixSparseMatMul.Options |
adjointB(Boolean adjointB)
Sets the adjointB option.
|
Output<TType> |
asOutput()
Returns the symbolic handle of the tensor.
|
Output<? extends TType> |
c()
Gets c.
|
static <T extends TType> |
create(Scope scope,
Operand<? extends TType> a,
Operand<? extends TType> b,
Class<T> type,
SparseMatrixSparseMatMul.Options... options)
Factory method to create a class wrapping a new SparseMatrixSparseMatMul operation.
|
static SparseMatrixSparseMatMul.Options |
transposeA(Boolean transposeA)
Sets the transposeA option.
|
static SparseMatrixSparseMatMul.Options |
transposeB(Boolean transposeB)
Sets the transposeB option.
|
public static final String OP_NAME
public SparseMatrixSparseMatMul(Operation operation)
@Endpoint(describeByClass=true) public static <T extends TType> SparseMatrixSparseMatMul create(Scope scope, Operand<? extends TType> a, Operand<? extends TType> b, Class<T> type, SparseMatrixSparseMatMul.Options... options)
T
- data type for SparseMatrixSparseMatMul
output and operandsscope
- current scopea
- A CSRSparseMatrix.b
- A CSRSparseMatrix.type
- The value of the type attributeoptions
- carries optional attribute valuespublic static SparseMatrixSparseMatMul.Options transposeA(Boolean transposeA)
transposeA
- Indicates whether a
should be transposed.public static SparseMatrixSparseMatMul.Options transposeB(Boolean transposeB)
transposeB
- Indicates whether b
should be transposed.public static SparseMatrixSparseMatMul.Options adjointA(Boolean adjointA)
adjointA
- Indicates whether a
should be conjugate-transposed.public static SparseMatrixSparseMatMul.Options adjointB(Boolean adjointB)
adjointB
- Indicates whether b
should be conjugate-transposed.public Output<TType> asOutput()
Operand
Inputs to TensorFlow operations are outputs of another TensorFlow operation. This method is used to obtain a symbolic handle that represents the computation of the input.
asOutput
in interface Operand<TType>
OperationBuilder.addInput(Output)
Copyright © 2015–2022. All rights reserved.