【问题标题】:Linear dependent rows: Huge Sparse Matrix线性相关行:巨大的稀疏矩阵
【发布时间】:2015-03-08 16:29:25
【问题描述】:

我有一个巨大的稀疏矩阵A

<5000x5000 sparse matrix of type '<type 'numpy.float64'>'
    with 14979 stored elements in Compressed Sparse Column format>

我需要为谁删除线性相关的行。我有一个先验,j 行将是依赖的。我需要

  • 找出哪些行集是线性相关的
  • 对于每一组,保留任意一行并删除其他行

我试图关注this question,但稀疏矩阵的相应方法scipy.sparse.linalg.eigs 这么说

k:所需的特征值和特征向量的数量。 k 必须小于 N。不可能计算 a 的所有特征向量 矩阵。

我应该如何进行?

【问题讨论】:

  • 这里可能正确的工具是QR decomposition。 Scipy 仅适用于密集矩阵。然而,Gram-Schmid orthonormalization 对于稀疏矩阵的编程应该相对简单,尽管让它变得更快可能需要更多的努力。线性相关行由在正交化期间变为零(或接近于零)的行表示。您可以检测并记录该行的索引 --- 这些是您要删除的索引。

标签: python scipy


【解决方案1】:

scipy.sparse.linalg.eigs 使用隐式重启的 Arnoldi 迭代。该算法旨在快速找到几个特征向量,并且无法找到所有个。

然而,

5000x5000 并没有 那么 大。您是否考虑过只使用numpy.linalg.eigscipy.linalg.eig?这可能需要几分钟,但并非完全不可行。使用稀疏矩阵不会获得任何好处,但我不确定是否有一种算法可以有效地找到稀疏矩阵的所有特征向量。

【讨论】:

  • 我想有不涉及计算特征值的替代程序?这是必须迭代大约 50-100 次的代码的一部分。啊,我开始(出于某种其他原因)使用稀疏矩阵,所以我不是专门为此目的创建它。
猜你喜欢
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 2019-04-29
  • 2019-09-06
  • 2012-07-05
  • 2014-07-14
相关资源
最近更新 更多