Python:相当于Matlab的大型数组的svds(A,k)?

dig*_*din 5 python matlab

我正在尝试将一些代码从Matlab移植到Python,我遇到了一个问题.我似乎无法找到相当于svds.

我尝试使用numpy.corrcoef然后numpy.linalg.eig,但numpy.corrcoef不适用于大型数组(比如500 x 20000).

这是matlab中的代码,如果它有任何区别:

s = size(data, 2)
mean = sum(data, 2)/s
m_data = ( data - repmat(mean, 1, s) ) / sqrt(s - 1)
[res_u,res_s] = svds(m_data, s)
eigenvals = diag(res_s).^2
eigenvecs = res_u
Run Code Online (Sandbox Code Playgroud)

cha*_*anK 2

如果你的矩阵是稀疏的,你可以scipy.sparse.linalg.svds在最近的 scipy 发行版中使用。它将稀疏 SVD 例程包装在 ARPACK 中。根据我的经验,它是有问题的(不确定这是 scipy 还是 ARPACK 的错误),所以我建议运行测试来检查奇异值是否符合预期。

如果你的矩阵很密集,500 x 20000 就很大了,但在如今的商用桌面上并不难处理。您正在打电话,对吗numpy.linalg.svdfull_matrices=False

你用来做什么numpy.corrcoef?您发布的 MATLAB 代码片段中没有出现类似的情况。