element wise multiplication and sum
24 views (last 30 days)
Show older comments
hi,
i have a matirx a = [1,2,3;4,5,6]; and another matrix b=[2,2,2]
i want to multiply a[i,:].*b where i=1,2 (i.e. the rows of matrix a).
this will result in a matrix y with two rows (with 15 in row1 and 30 in row2)
how do i achieve this efficently without writing a "for" loop.
thanks in advance
Accepted Answer
More Answers (2)
Akbar Khan
on 20 Aug 2016
As per my understanding of internal implementation of matlab. Matrix multiplication and matrix addition is an O(n^3) and O(n^2) time complexity algorithm. However I am not sure whether Strassen's algorithm is implemented internally.
0 Comments
Evan
on 3 Dec 2012
Edited: Evan
on 3 Dec 2012
NOTE: Ignore my answer. Matt's is much better. :P
>> a = [1,2,3;4,5,6]; >> b = [2,2,2]; >> tic >> c = bsxfun(@times,a,b) >> toc
c =
2 4 6
8 10 12
Elapsed time is 0.000333 seconds.
For more info:
help bsxfun
Another (faster) way would be to resize b to be the same size as a and then perform element-wise multiplication. So something like this:
>> a = [1,2,3;4,5,6];
>> b = [2,2,2];
>> n = 2; %OR n = size(a,1);
>> tic
>> c = a .* b(ones(n,1),:) %second term is same as (ones(n,1) * b)
>> toc
c =
2 4 6
8 10 12
Elapsed time is 0.000040 seconds.
You would just have to find the number of rows in a and use that as n for a general case.
Then, of course, you would just use the "sum" function to get your answer. I'm guessing you meant you wanted your answer to be [12; 30]? If so, you would just sum along columns:
>> y = sum(c,2)
y =
12
30
0 Comments
See Also
Categories
Find more on Multidimensional Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!