【发布时间】:2018-05-16 02:55:25
【问题描述】:
当对numpy.ndarray求和时,它会降低数组的维数,除非我们设置keepdims=True。然而,对于 Scipy 的稀疏矩阵来说,这似乎并非如此:
import scipy.sparse
matrix = scipy.sparse.coo_matrix([[0, 1], [2, 1]])
print(matrix.shape) # (2, 2) as expected.
print(matrix.sum().shape) # () as expected.
print(matrix.sum(axis=0).shape) # (1, 2) but expected (2,).
print(matrix.sum(axis=0)[0].shape) # (1, 2) but expected (2,).
如示例中的最后一行所示,我什至无法选择结果向量。此外,尝试将总和的结果转换为密集的 Numpy 数组失败:
matrix.toarray() # This works.
matrix.sum(axis=0).toarray() # AttributeError: 'matrix' has no 'toarray'.
如何计算稀疏矩阵沿一维的总和并获得密集数组的结果?
【问题讨论】:
-
我认为这是因为它是一个“矩阵”而不是一个数组。因此你必须有两个维度。
-
@PaulH 为什么我可以将原始矩阵转换为 Numpy 数组,而不是从总和返回的对象?
-
稀疏矩阵 vs numpy.matrix?
-
你是对的,总和返回一个 Numpy 矩阵,所以
np.asarray(matrix.sum(axis=0))[0]有效。这应该被视为 Scipy 中的错误吗?如果它无论如何都返回一个 Numpy 对象,那么支持正确排名的numpy.ndarray类型会更适合。 -
与
np.matrix、which also produces a matrix fromsum一致。
标签: python scipy sparse-matrix