我正在尝试将一些代码从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)
如果你的矩阵是稀疏的,你可以scipy.sparse.linalg.svds
在最近的 scipy 发行版中使用。它将稀疏 SVD 例程包装在 ARPACK 中。根据我的经验,它是有问题的(不确定这是 scipy 还是 ARPACK 的错误),所以我建议运行测试来检查奇异值是否符合预期。
如果你的矩阵很密集,500 x 20000 就很大了,但在如今的商用桌面上并不难处理。您正在打电话,对吗numpy.linalg.svd
?full_matrices=False
你用来做什么numpy.corrcoef
?您发布的 MATLAB 代码片段中没有出现类似的情况。
归档时间: |
|
查看次数: |
2326 次 |
最近记录: |