如何在scipy中定义(n,0)稀疏矩阵或如何组合稀疏矩阵列?

时间:2013-06-19 14:40:55

标签: python numpy scipy sparse-matrix

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

要按照我想到的使用

的列填充/增长/累积N
N = scipy.sparse.hstack([N, c]) 

要做到这一点,最好使用长度为0的行初始化矩阵。但是,

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

提出ValueError: invalid shape

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

2 个答案:

答案 0 :(得分:3)

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

话虽如此,我不明白为什么你需要一个 n ×0稀疏矩阵,因为允许 n ×0 NumPy数组,几乎没有存储空间。

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

答案 1 :(得分: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>