我有一个循环,在每次迭代中给我一个稀疏矩阵c
的列N
。
要按照我想到的使用
的列填充/增长/累积N
列
N = scipy.sparse.hstack([N, c])
要做到这一点,最好使用长度为0的行初始化矩阵。但是,
N = scipy.sparse.csc_matrix((4,0))
提出ValueError: invalid shape
。
任何建议,如何做到这一点?
答案 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>