【问题标题】:Add values to a Scipy sparse matrix with indexes and values将值添加到具有索引和值的 Scipy 稀疏矩阵
【发布时间】:2013-07-18 11:35:38
【问题描述】:

我正在研究电力系统分析程序,我需要使用稀疏矩阵。

有一个例程,我只需通过以下调用填充稀疏矩阵:

self.A = bsr_matrix((val, (row,col)), shape=(nele, nbus), dtype=complex)

因为这个矩阵不会随着时间而改变。另一个矩阵确实会随着时间而改变,我需要更新它。有没有办法,例如:

co     = [ 2, 3, 6]
row    = [ 5, 5, 5]
val    = [ 0.1 + 0.1j, 0.1 - 0.2j, 0.1 - 0.4j]

我可以将它们添加到先前初始化的稀疏矩阵中吗?更pythonic的方式是如何做到的?

谢谢

【问题讨论】:

    标签: python numpy scipy sparse-matrix


    【解决方案1】:

    您应该改用coo_matrix,在这里您可以更改先前创建的稀疏矩阵的colrowdata 属性:

    from scipy.sparse import coo_matrix
    nele=30
    nbus=40
    col    = [ 2, 3, 6]
    row    = [ 5, 5, 5]
    val    = [ 0.1 + 0.1j, 0.1 - 0.2j, 0.1 - 0.4j]
    test = coo_matrix((val, (row,col)), shape=(nele, nbus), dtype=complex)
    
    print test.col
    #[2 3 6]
    print test.row
    #[5 5 5]
    print test.data
    #[ 0.1+0.1j  0.1-0.2j  0.1-0.4j]
    

    【讨论】:

    • 谢谢。我在文档中读到: 默认情况下,在转换为 CSR 或 CSC 格式时,重复的 (i,j) 条目将被汇总在一起。这有助于有效构建有限元矩阵等。 (参见示例) 这或多或少地解决了我遇到的问题。在我的代码中,有几个对象对这个矩阵有贡献,两个对象可以对同一个 (i,j) 条目有贡献。这意味着每次我想添加一个对象的贡献时,我都必须重建矩阵?
    • 嗨...是的,您可以使用不同的对象来构建矩阵,只需将colrow 参数分配给coo_matrix。我不确定SciPy 在构建稀疏矩阵时是否会创建内部副本
    猜你喜欢
    • 2012-01-15
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 2021-10-30
    • 2017-02-12
    • 1970-01-01
    • 2012-05-08
    • 2014-10-15
    相关资源
    最近更新 更多