3

我有一个循环,在每次迭代中都会给我一列c稀疏矩阵N

N逐列组装/增长/累积我想使用的列

N = scipy.sparse.hstack([N, c]) 

为此,最好使用长度为 0 的行来初始化矩阵。但是,

N = scipy.sparse.csc_matrix((4,0))

提出一个ValueError: invalid shape

任何建议,如何做到这一点?

4

2 回答 2

3

你不能。与 NumPy 数组相比,稀疏矩阵受到限制,特别是不允许0任何轴。所有稀疏矩阵构造函数都会对此进行检查,因此,如果您确实设法构建了这样的矩阵,那么您就是在利用 SciPy 错误,并且您的脚本可能会在您升级 SciPy 时中断。

话虽如此,我不明白为什么需要n × 0 稀疏矩阵,因为允许使用n × 0 NumPy 数组并且几乎不占用存储空间。

结果sparse.hstack无法处理零轴的 NumPy 数组,因此请忽略我之前的评论。但是,我认为您应该做的是收集列表中的所有列,然后hstack一次调用。这比你的循环要好,因为append'ing 到一个列表需要摊销的常数时间,而hstack需要线性时间。因此,您提出的算法需要二次时间,而它可能是线性的。

于 2013-06-19T15:11:46.190 回答
1

你必须至少1在你的形状中使用。

N = scipy.sparse.csc_matrix((4,1))

您可以堆叠:

print scipy.sparse.hstack( (N,N) )
#<4x2 sparse matrix of type '<type 'numpy.float64'>'
#    with 0 stored elements in COOrdinate format>
于 2013-06-19T14:53:47.640 回答