tf.raw_ops.SparseMatrixSparseMatMul
Перемножает две разреженные матрицы CSR a и b.
tf.raw_ops.SparseMatrixSparseMatMul(
a,
b,
type,
transpose_a=False,
transpose_b=False,
adjoint_a=False,
adjoint_b=False,
name=None
)
Выполняет умножение разреженной матрицы a на разреженную матрицу b; возвращает разреженную матрицу a * b, если только a или b не транспонирована и не эрмитово сопряжена.
Каждая матрица может быть транспонирована или эрмитово сопряжена (сопряжена и транспонирована) в соответствии с логическими параметрами transpose_a, adjoint_a, transpose_b и adjoint_b. Только один из параметров transpose_a и adjoint_a может иметь значение True. Аналогично, только один из параметров transpose_b и adjoint_b может иметь значение True.
Входные данные должны иметь совместимые формы. То есть внутренняя размерность a должна быть равна внешней размерности b. Это требование зависит от того, транспонирована ли или эрмитово сопряжена a или b.
Параметр type задаёт тип элементов матрицы. Типы a и b должны совпадать. Поддерживаются следующие типы: float32, float64, complex64 и complex128.
Ранги a и b должны совпадать. Трансляция не поддерживается. Если ранг равен 3, каждая партия двумерных матриц CSRSparseMatrix в a и b должна иметь одинаковую плотную форму.
В произведении разреженных матриц могут присутствовать числовые (не структурные) нули.
нули.
Пример использования:
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: CSRSparseMatrix с теми же типом и рангом, что и у a. type: Типы a и b. transpose_a: Если True, a транспонируется перед умножением. transpose_b: Если True, b транспонируется перед умножением. adjoint_a: Если True, a эрмитово сопрягается перед умножением. adjoint_b: Если True, b эрмитово сопрягается перед умножением.
| Аргументы | |
|---|---|
a | Tensor типа variant. Матрица CSRSparseMatrix. |
b | Tensor типа variant. Матрица CSRSparseMatrix. |
type | tf.DType из: tf.float32, tf.float64, tf.complex64, tf.complex128. |
transpose_a | Необязательный параметр bool. По умолчанию — False. Указывает, следует ли транспонировать a. |
transpose_b | Необязательный параметр bool. По умолчанию — False. Указывает, следует ли транспонировать b. |
adjoint_a | Необязательный параметр bool. По умолчанию — False. Указывает, следует ли эрмитово сопрягать a. |
adjoint_b | Необязательный параметр bool. По умолчанию — False. Указывает, следует ли эрмитово сопрягать b. |
name | Имя операции (необязательно). |
| Возвращаемое значение | |
|---|---|
Tensor типа variant. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/raw_ops/SparseMatrixSparseMatMul