在回答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时需要转置稀疏矩阵。预先感谢。
答案 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)
可以得到相同的结果。