首页 > 解决方案 > 将密集向量与 Tensorflow 中稀疏矩阵的每一行相乘

问题描述

假设我有一个稀疏矩阵

A = tf.sparse.SparseTensor(indices=[[0,0],[1,1],[1,2]], values=[1,1,1], 
                dense_shape=[2,3])

和一个密集的向量

B = tf.constant([4,3,5])

矩阵 A 和向量 B 的形状(2,3)分别(1,3)为 。我想逐元素地将 B 与 A 的每一行相乘。预期的结果是另一个稀疏矩阵,比如说

C = tf.sparse.SparseTensor(indices=[[0,0],[1,1],[1,2]], values=[4,3,5], 
                dense_shape=[2,3])

我知道如果A是一个密集矩阵会相对容易,但是 的密集大小A非常大,并且其中的大多数元素A为零。

标签: pythontensorflowmatrixsparse-matrix

解决方案


只需乘以星号*即可。

tf.reduce_all(tf.sparse.to_dense(A * B) == tf.sparse.to_dense(C))
<tf.Tensor: shape=(), dtype=bool, numpy=True>

顺便说一句,B有形状(3,),没有(1, 3)

这是此操作的结果:

<tf.Tensor: shape=(2, 3), dtype=int32, numpy=
array([[4, 0, 0],
       [0, 3, 5]])>

您也可以手动完成此操作,但请注意广播规则:

tf.sparse.SparseTensor(indices=A.indices, values=A.values * B, 
                       dense_shape=A.dense_shape)

推荐阅读