【问题标题】:Get a range of singular values from a sparse matrix从稀疏矩阵中获取一系列奇异值
【发布时间】:2021-02-27 16:10:58
【问题描述】:

我有一个具有3e5x3e5 维度的巨大稀疏矩阵。我想计算它的 svd,我需要所有奇异值。 scipy.sparse.linalg.svds 的实现将不起作用,因为它需要分配一个与稀疏矩阵具有相同维度的完整矩阵。有没有办法有效地做到这一点?如果没有,我正在考虑按顺序获取奇异值,例如:

#A is the sparse matrix. l is how many singular values are calculated in each iteration.n is dim(A)
i=0
while i < n:
  # it will give you, the ith to (i+l)th largest/smallest singular values. 
  get_range_of_singular_values(A,i,i+l)
  i = i + l

但我不知道支持它的 API?有关如何解决此问题的任何线索?我还需要奇异向量,所以如果解决方案没有提供它们,它们就没有用了。

【问题讨论】:

    标签: python scipy sparse-matrix linear-algebra


    【解决方案1】:

    您在这里的选择非常有限,TruncatedSVD 是您的最佳选择。这是稀疏矩阵上 SVD 的最佳选择之一,但您无法重新定位(原因很明显)。

    from sklearn.decomposition import TruncatedSVD
    
    # Use a 3e5 x 3e5 arbitrary CSR array
    >>> arr
    <300000x300000 sparse matrix of type '<class 'numpy.float64'>'
        with 90000 stored elements in Compressed Sparse Row format>
    
    
    # 5 components 
    tsvd = TruncatedSVD(n_components=5).fit(arr)
    
    >>> tsvd.singular_values_
    array([2.01028547, 1.71143827, 1.66276059, 1.63698292, 1.61189899])
    

    如果您打算将其用于任何分析,您应该至少将列方差重新调整为 1,以防止缩放比例大不相同的列驱动整个输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      相关资源
      最近更新 更多