【问题标题】:sparse matrix from dictionaries字典中的稀疏矩阵
【发布时间】:2011-06-10 17:38:58
【问题描述】:

我刚开始学习用 Python 编程,我正在尝试使用 Scipy 包构建一个稀疏矩阵。我发现有不同类型的稀疏矩阵,但它们都需要使用行、列、数据等三个向量来存储;或者,如果您想分别输入每个新条目,例如 S(i,j) = s_ij,您需要以给定的大小启动矩阵。
我的问题是,是否有一种方法可以在不需要初始大小的情况下逐项存储矩阵,例如字典。

【问题讨论】:

    标签: python scipy sparse-matrix


    【解决方案1】:

    没有。 Scipy 中的任何矩阵,无论是否稀疏,都必须使用大小进行实例化。

    【讨论】:

    • 感谢您的回答。我终于意识到我需要分两步存储矩阵,一个用于读取所有数据,另一个用于存储,以我想要的任何方法。但现在我对这个过程很满意。
    • 不客气。是的,这很好用。或许您可以使用max 快速找到最大索引。
    【解决方案2】:

    您可以使用通常的字典,将两个整数的元组作为索引。例如:

    matrix = {}
    matrix[5, 7] = 1
    matrix[3, 8] = 5
    

    【讨论】:

    • 你不需要在元组周围加括号
    • 感谢您的回答。我最初确实将条目保存为字典,但最终我需要稀疏结构来执行计算,这就是我之前尝试做的一步。我确实发现没有办法解决这个问题。
    • 正如 JBernardo 指出的那样,matrix[5, 7] = 1 更简洁,但没有那么明确
    • @Diego 矩阵乘法、加法、sqrt 等在稀疏字典的稀疏字典上运行良好——它们的行为就像列表的二维列表或 numpy 稀疏矩阵一样——它们的索引类似于 @ 987654323@。任何矩阵/向量运算都需要一个 4 线。只需假设数据中的空白为零(或您需要的任何值)。 defaultdictdefaultdicts 可以替代对列表列表的任何操作,但它也可能比完全填充的列表列表使用更多的内存。
    【解决方案3】:
    dic={}
    a,b=int(input("Enter the order:")),int(input())
    for i in range(a):
        for j in range(b):
            c=int(input())
            if c!=0:
                dic[(i,j)]=c
    if len(dic)<=(a+b)/2:
        print("sparse metrix")
    else:
        print("non sparse metrix")
    
    for i in range(a):
        for j in range(b):
            print(dic.get((i,j),0),end=" ")
        print()    
    

    【讨论】:

    • 请解释答案,而不是仅仅发布解决方案“我们不是代码编写服务”,这样将来也将对其他人有益
    猜你喜欢
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2018-08-05
    • 2012-01-10
    • 2015-04-26
    • 1970-01-01
    相关资源
    最近更新 更多