次の式を評価する必要があります(疑似数学表記で):
∑<sub>ipi⋅<b>n
ここp
で、 は 3 要素ベクトルの行列で、 はn
3 要素ベクトルです。次のように for ループを使用してこれを行うことができますが、これをベクトル化する方法がわかりません。
p = [1 1 1; 2 2 2];
n = [3 3 3];
s = 0;
for i = 1:size(p, 1)
s = s + dot(p(i, :), n)
end
次の式を評価する必要があります(疑似数学表記で):
∑<sub>ipi⋅<b>n
ここp
で、 は 3 要素ベクトルの行列で、 はn
3 要素ベクトルです。次のように for ループを使用してこれを行うことができますが、これをベクトル化する方法がわかりません。
p = [1 1 1; 2 2 2];
n = [3 3 3];
s = 0;
for i = 1:size(p, 1)
s = s + dot(p(i, :), n)
end
なぜ物事を複雑にするのですか?単純な行列の乗算はどうですか:
s = sum(p * n(:))
ここで、はM行 3 列の行列でp
あると想定されます。
----------
% Is it the same for this case?
----------
n = 200; % depending on the computer it might be
m = 1000*n; % that n needs to be chosen differently
A = randn(n,m);
x = randn(n,1);
p = zeros(m,1);
q = zeros(1,m);
tic;
for i = 1:m
p(i) = sum(x.*A(:,i));
q(i) = sum(x.*A(:,i));
end
time = toc; disp(['time = ',num2str(time)]);
私はあなたがそれを行うことができると思いますbsxfun
:
sum(sum(bsxfun(@times,p,n)))