您正在寻找这样的内容,会是这样的python
和numpy
(我冒昧不“直接翻译”的matlab
-code到python
和numpy
,而是我重构它一点点地“的感觉“更pythonic
[of'course颇为相似的重构可以应用到matlab
-code以及]):
import numpy as np
def _cas(D):
"""Center at mean and standardize."""
return (D- D.mean(1)[:, None])/ (D.shape[1]- 1)** .5
def example(D):
"""Eigenvalues and -vectors, based on SVD."""
u, s, v= np.linalg.svd(D, full_matrices= False);
return np.diag(s)** 2, u
if __name__ == '__main__':
data= np.random.rand(5, 20)
data= _cas(data) # preprocess data according to your requirements
eigenvals, eigenvecs= example(data)
print eigenvals
print eigenvecs
但你必须与它的性能问题?
您现在可以更具体地了解您当前的表现,以及您真正期望应该增强多少?在我的普通计算机上的FTIW中,随机(500,20000)矩阵将花费大约20秒执行example(.)
。
我可以平凡(由于基本的线性代数)将执行时间降低到2.5秒的水平(总共提高10倍)!现在,如果您正在寻找比此更好的性能,请详细说明您的data
的“性质”!
您的数据来自哪里?利用计算出的特征值和 - 矢量的具体情况是什么?即你的主要目标是什么?
来源
2011-02-12 16:12:06
eat
`numpy.linalg.svd`还不够? – kwatford 2011-02-11 22:55:01
@kwatford问题不是eig/svd,它是corrcoef。为了让eig或svd工作,我必须先使用corrcoef。那么,用我目前的方法。可能有另一种方法来处理它,我不知道。 – digdin 2011-02-11 22:59:47