2012-01-06 26 views
0

我有一個矩陣給出的向量列表,其中每行是一個向量x_i。現在我想作以下矩陣如何通過一次轉置將列表中的每個向量相乘?

M = sum_i C_I *(X_I * X_I」 - E(X_I * X_I '))

其中C_I是一個數字,E(X_I * X_I')= sum_i x_i * x_i'/ n,n是行數。

一爲這個可憐的代碼是

x = rand(50,10000); 
c = rand(10000,1); 
M = zeros(50,50); 
Y = zeros(50,50); 
for i=1:size(x,2) 
    M = M + x(:,i)*x(:,i)'; 
end; 
M = M/size(x,2); 
for i=1:size(x,2) 
    Y = Y + c(i)*(x(:,i)*x(:,i)' - M); 
end; 

回答

1

你的問題是不完整的,但這裏的東西,匹配您的代碼:

M = x*x'/size(x, 2); % first for loop 
Y = x*diag(c)*x' - sum(c) * M; 

請注意,您的c可能是wron G。使用c = rand(10000,1);來獲得一個向量。

+0

你是絕對正確的,謝謝! – 2012-01-07 19:42:33

0

由於通過轉置相乘也不過是乘法的總和,得到的答案是:

s = sum(x.*x,2) 
相關問題