Итак, то, что вы ищете, будет примерно таким в python
и numpy
(я взял на себя смелость не "напрямую переводить" matlab
-код в python
и numpy
, вместо этогоЯ немного изменил рефакторинг, чтобы «почувствовать» больше pythonic
[of'course, довольно похожий рефакторинг можно применить и к matlab
-коду]]:
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
Но у вас есть производительностьпроблема с этим?
Можете ли вы теперь более точно указать текущую производительность, и насколько вы действительно можете ожидать ее повышения?В моем скромном компьютере случайная (500, 20000) матрица потратит на выполнение example(.)
около 20 секунд.
Я могу тривиально (благодаря базовой линейной алгебре) сократить время выполнения до уровня, равного 2,5 с (почти 10-кратное улучшение)!Теперь, если вы ищете гораздо лучшую производительность, чем эта, то, пожалуйста, уточните более детально о «природе» вашего data
!
Откуда поступают ваши данные?В каком конкретном случае вы используете вычисленные собственные значения и -векторы?т. е. какова ваша главная цель?