2012-01-06 1 views
0

私は、各行がベクトルx_iである行列によって与えられるベクトルのリストを持っています。 C_Iは数であり、E(X_I * X_I ')= sum_iリスト内の各ベクトルにその転置を一度に乗算する方法はありますか?

- 今、私は次の行列

M = sum_i C_I *(「E(X_I * X_I')X_I * X_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

あなたは絶対に正しいです、ありがとうございます! –

0

です:

s = sum(x.*x,2) 
関連する問題