Question

I need to evaluate following expression (in pseudo-math notation):

ipin

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
Was it helpful?

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)]);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top