在 Tensorflow 中按元素将密集向量与稀疏矩阵的每一行相乘
Element-wise multiply a dense vector with each row of a sparse matrix in 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
中的大部分元素都是零。
只需乘以星号 *
即可。
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)
假设我有一个稀疏矩阵
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
中的大部分元素都是零。
只需乘以星号 *
即可。
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)