2015-10-17 7 views
1

У меня есть две матрицы, а 2000 - 20000, b - 2000 на 20000. Я хочу получить диагональные элементы a'*b. Я использовал diag(a'*b), но он очень медленный (около 20 секунд), так как вычисление недиагональных элементов требует времени. Мне интересно, есть ли более быстрые способы сделать это.Matlab эффективно принимает диагональные значения матричного продукта

Я заметил, что люди делают что-то вроде sum((T*H).*T',2), вот link. Но требуется, чтобы T была квадратной матрицей. Как насчет не квадратной матрицы в моем случае?

Благодаря

+0

завершить матрицы с нулями на площади? – percusse

ответ

1

Диагональ a'*b просто

result = sum(a'.*b.',2); 

Пример (с неквадратными матриц):

>> a = rand(4,5); 
>> b = rand(4,5); 
>> result = sum(a'.*b.',2) 
result = 
    1.6102 
    0.2805 
    1.5354 
    0.3966 
    1.1896 

>> diag(a'*b) 
ans = 
    1.6102 
    0.2805 
    1.5354 
    0.3966 
    1.1896