How to multiply a matrix by certain numbers?

3 views (last 30 days)
I want to multiply a matrix by a column vector in this way:
(4 2 3 8;7 9 1 5;6 4 8 3) * (4;8;2)
and then the result i want to get is:
(4*4 2*4 3*4 8*4;7*8 9*8 1*8 5*8;6*2 4*2 8*2 3*2)
  3 Comments
madhan ravi
madhan ravi on 30 Jun 2019
xy = repmat(x,1,1,numel(x)) .* reshape(y,1,1,[]); % for version <=2016b bsxfun(@times,repmat(x,1,1,numel(x)) , reshape(y,1,1,[]))
Wanted = reshape(squeeze(xy).',1,[])
Stephen23
Stephen23 on 30 Jun 2019
Edited: Stephen23 on 30 Jun 2019
@Shubha Baravani: the simple MATLAB way:
>> x = [1,2,3,4];
>> y = [2,3,4,5];
>> z = kron(x,y)
z =
2 3 4 5 4 6 8 10 6 9 12 15 8 12 16 20

Sign in to comment.

Accepted Answer

Stalin Samuel
Stalin Samuel on 23 Sep 2015
A = [4 2 3 8;7 9 1 5;6 4 8 3];
B = [4;8;2]
for i = 1:length(B)
C(i,:) = A(i,:)*B(i)
end
  1 Comment
Stephen23
Stephen23 on 23 Sep 2015
Edited: Stephen23 on 30 Jun 2019
Note that:
  1. The array C expands on every iteration, which is slow and inefficient. Preallcoation would resolve this.
  2. Using a loop is more complex than using vectorized code.
  3. The variable name i should be avoided, as it is the name of the imaginary unit.

Sign in to comment.

More Answers (1)

Stephen23
Stephen23 on 23 Sep 2015
Edited: Stephen23 on 23 Sep 2015
Just use bsxfun:
>> X = [4 2 3 8;7 9 1 5;6 4 8 3];
>> Y = [4;8;2];
>> bsxfun(@times,X,Y)
ans =
16 8 12 32
56 72 8 40
12 8 16 6
  1 Comment
Royvg94
Royvg94 on 23 Sep 2015
This one is much better, thanks! But i cant change my accepted answer right?

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!