【问题标题】:How to define a (n, 0) sparse matrix in scipy or how to assemble a sparse matrix column wise?如何在 scipy 中定义 (n, 0) 稀疏矩阵或如何按列组装稀疏矩阵?
【发布时间】:2013-06-16 03:54:59
【问题描述】:

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

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

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

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

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

引发ValueError: invalid shape

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

【问题讨论】:

    标签: python numpy scipy sparse-matrix


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,这一切都说得通。我将使用列表!
    【解决方案2】:

    你必须在你的形状中至少使用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>
    

    【讨论】:

    • 谢谢,我知道,但我正在寻找一个 (4,0) 矩阵。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2017-10-23
    • 2012-05-15
    • 2020-12-07
    • 2017-03-26
    • 2017-03-31
    • 1970-01-01
    相关资源
    最近更新 更多