element wise multiplication and sum

조회 수: 21 (최근 30일)
Kaushik
Kaushik 2012년 12월 3일
댓글: Yency Perez 2020년 9월 10일
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
  댓글 수: 1
Azzi Abdelmalek
Azzi Abdelmalek 2012년 12월 3일
What is the expected result?

댓글을 달려면 로그인하십시오.

채택된 답변

Matt Fig
Matt Fig 2012년 12월 3일
편집: Matt Fig 2012년 12월 3일
I don't know where the 15 came from. I assume you mean 12.
>> a = [1,2,3;4,5,6];
>> b = [2,2,2];
>> a*b.' % same results as: sum(a.*[b;b],2)
ans =
12
30
  댓글 수: 2
Evan
Evan 2012년 12월 3일
Oh wow, I can't believe I missed that. Yes, this is a much better answer. :P
Yency Perez
Yency Perez 2020년 9월 10일
Hi, i'm wondering how to do it using a "for" loop!

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Akbar Khan
Akbar Khan 2016년 8월 20일
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.

Evan
Evan 2012년 12월 3일
편집: Evan 2012년 12월 3일
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

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by