【问题标题】:Getting first singular values获得第一个奇异值
【发布时间】:2019-10-04 04:09:40
【问题描述】:

我一直在尝试找到获取矩阵的第一个和前两个奇异值的方法。但经过我们的一些研究后,我想我可以在这里联系并获得有关如何找到矩阵的第一个奇异值的帮助。

 import numpy.matlib
 import numpy as np
 from scipy.linalg import svd


 def get_singular_values(M, k):

     u, s, v = np.linalg.svd(M, full_matrices=False)

     singular_values = numpy.matrix(u[:, :k]) * numpy.diag(s[:k]) * 
     numpy.matrix(v[:k, :]) #my attempt

     return singular_values


 M = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]

 only_first_singular_value = get_singular_values(M, 1) #first singular
 print(only_first_singular_value) # 1 is for first singular
 only_first_singular_value = get_singular_values(M, 2) #first two singular
 print(only_first_singular_value) # 2 is for 2 singular

【问题讨论】:

  • singular_values 突然出现,kget_singular_values 中未使用。请更新示例
  • k 是单数的数量,正如我提到的,我需要一些代码帮助,我想返回单数。
  • 你还提到你花了几个小时解决这个问题。很高兴看到您尝试发现错误
  • 我添加了我尝试的代码
  • 据我记得你只需要return s[:k]

标签: python matrix


【解决方案1】:

np.linalg.svd() 直接给你奇异值:

In [1]: m = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])

In [2]: _, s, _ = np.linalg.svd(m)

In [3]: s[0] # first singular value
Out[3]: 25.462407436036397

In [4]: s[1] # second singular value
Out[4]: 1.2906616757612328

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    相关资源
    最近更新 更多