代码之家  ›  专栏  ›  技术社区  ›  gilesc

稀疏三角矩阵?

  •  7
  • gilesc  · 技术社区  · 16 年前

    我正在使用Scipy构建一个大的、稀疏的(250k X 250k)共生矩阵,使用 scipy.sparse.lil_matrix

    我的问题是,我需要能够随机抽取与给定索引对应的数据,但是,至少我目前正在这样做,一半的数据在行中,一半在列中,就像这样:

    M = 
        [1 2 3 4
         0 5 6 7
         0 0 8 9
         0 0 0 10]
    

    M[1] ,然后回来 [2,5,6,7] . 我有两个问题:

    1) 有没有比先查询行,然后查询列,然后将两者连接起来更有效的方法(最好是内置的)?这是不好的,因为无论我使用CSC(基于列)还是CSR(基于行)内部表示,这两个查询中的一个都非常低效。

    2) 我是不是用对了Scipy?我在Scipy库中看到一些函数提到了三角矩阵,但它们似乎围绕着从完整矩阵中获取三角矩阵展开。在我的例子中,(我想)我已经有了一个三角形矩阵,并且想要操纵它。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    我想说的是,你不能既有蛋糕又吃它:如果你想要有效的存储,你就不能存储整排(如你所说);如果您想要高效的行访问,我会说您必须存储完整的行。

    1. 你用 Scipy's sparse matrices 有效储存。

    2. 你可以自动对称化你的矩阵(有一个 small recipe 在StackOverflow上,这至少对正则矩阵有效)。

    3. 然后可以访问它的行(或列);这是否有效取决于稀疏矩阵的实现