【问题标题】:Element-wise multiply a dense vector with each row of a sparse matrix in Tensorflow将密集向量与 Tensorflow 中稀疏矩阵的每一行相乘
【发布时间】:2021-09-22 19:21:29
【问题描述】:

假设我有一个稀疏矩阵

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 中的大部分元素都是零。

【问题讨论】:

    标签: python tensorflow matrix sparse-matrix


    【解决方案1】:

    只需乘以星号 * 即可。

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-18
      • 2021-07-18
      • 2013-05-20
      • 2021-01-31
      • 1970-01-01
      • 2014-03-06
      • 2020-08-11
      • 1970-01-01
      相关资源
      最近更新 更多