Python 问题“的后续行动”;在TensorFlow中使用coo_矩阵;

Python 问题“的后续行动”;在TensorFlow中使用coo_矩阵;,python,tensorflow,Python,Tensorflow,在对问题的答复中提到: 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时需要转置scipy稀疏矩阵。提前感谢。如果您查看的文档中,索引预计为二维张量,维度为(N,ndims),其中N是稀疏张量中的非零值数量

在对问题的答复中提到:

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时需要转置scipy稀疏矩阵。提前感谢。

如果您查看的文档中,
索引
预计为二维张量,维度为
(N,ndims)
,其中
N
是稀疏张量中的非零值数量,
ndims
是其维度数量。对于稀疏矩阵(二维),每行将包含
值中相应值的行和列

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