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.

Categories

Find more on MATLAB 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!