有关问题“在TensorFlow中使用coo_matrix”的后续操作

时间:2018-09-25 11:44:45

标签: python tensorflow

在回答question时提到:

tf_coo_matrix = tf.SparseTensorValue(
indices=np.array([coo_matrix.rows, coo_matrix.cols]).T,
values=coo_matrix.data,
dense_shape=coo_matrix.shape)

我试图理解为什么使用TensorFlow时需要转置稀疏矩阵。预先感谢。

1 个答案:

答案 0 :(得分:1)

如果您查看tf.SparseTensor的文档,则indices应该是二维张量,尺寸为(N, ndims),其中N是非张量。稀疏张量中的值为零,ndims是其维数。对于稀疏矩阵(二维),每行将包含values中对应值的行和列。

在代码段中,coo_matrix.rows是稀疏矩阵的行索引的数组,而coo_matrix.cols是列索引的数组。 np.array([coo_matrix.rows, coo_matrix.cols])将是一个具有两行和N列的数组,这与稀疏张量所期望的顺序相反,因此使用.T对其进行转置,您将得到(N, 2)索引张量。并不是说您没有转置稀疏矩阵,而是索引仍然保持不变,而是按照所需顺序将它们赋予tf.SparseTensorValue。例如,执行np.stack([coo_matrix.rows, coo_matrix.cols], axis=1)可以得到相同的结果。