我有一个循环,在每次迭代中都会给我一列c
稀疏矩阵N
。
N
逐列组装/增长/累积我想使用的列
N = scipy.sparse.hstack([N, c])
为此,最好使用长度为 0 的行来初始化矩阵。但是,
N = scipy.sparse.csc_matrix((4,0))
提出一个ValueError: invalid shape
。
任何建议,如何做到这一点?
我有一个循环,在每次迭代中都会给我一列c
稀疏矩阵N
。
N
逐列组装/增长/累积我想使用的列
N = scipy.sparse.hstack([N, c])
为此,最好使用长度为 0 的行来初始化矩阵。但是,
N = scipy.sparse.csc_matrix((4,0))
提出一个ValueError: invalid shape
。
任何建议,如何做到这一点?
你不能。与 NumPy 数组相比,稀疏矩阵受到限制,特别是不允许0
任何轴。所有稀疏矩阵构造函数都会对此进行检查,因此,如果您确实设法构建了这样的矩阵,那么您就是在利用 SciPy 错误,并且您的脚本可能会在您升级 SciPy 时中断。
话虽如此,我不明白为什么需要n × 0 稀疏矩阵,因为允许使用n × 0 NumPy 数组并且几乎不占用存储空间。
结果sparse.hstack
无法处理零轴的 NumPy 数组,因此请忽略我之前的评论。但是,我认为您应该做的是收集列表中的所有列,然后hstack
一次调用。这比你的循环要好,因为append
'ing 到一个列表需要摊销的常数时间,而hstack
需要线性时间。因此,您提出的算法需要二次时间,而它可能是线性的。
你必须至少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>