Why complicate things? How about simple matrix multiplication:
s = sum(p * n(:))
where p
is assumed to be an M-by-3 matrix.
Question
I need to evaluate following expression (in pseudo-math notation):
∑ipi⋅n
where p
is a matrix of three-element vectors and n
is a three-element vector. I can do this with for loops as follows but I can't figure out
how to vectorize this:
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
Solution
Why complicate things? How about simple matrix multiplication:
s = sum(p * n(:))
where p
is assumed to be an M-by-3 matrix.
OTHER TIPS
I think you can do it with bsxfun
:
sum(sum(bsxfun(@times,p,n)))
----------
% 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)]);