MATLAB Answers

Question about 2D Vector Multiplication

1 view (last 30 days)
I just have a simple question about vector multiplication in MATLAB. Let's say I have these two vectors: A=[1 2 3 4 5] B=[6 7 8 9 1]
Now normally if you would multiply these you would get need to do a transpose of either one to get a dot product, however, I want to ask if it's possible to do something like the following:
Take the first value in Set A and multiply it once with each number in B (so on and so forth), to give something like:
6 12 18 .
7 14 21 .
8 16 24 .
9 18 27 .
1 2 3 etc
I'm sure there must be a simple way to do it but I can't figure it out and also possibly you can find a way to expand and do it manually, but a function would be ideal. I have 160 lines of code that I need to do this with. Help would be appreciated! Thank you!

  0 Comments

Sign in to comment.

Accepted Answer

Stephen Cobeldick
Stephen Cobeldick on 21 May 2015
Edited: Stephen Cobeldick on 21 May 2015
This is exactly what bsxfun is for:
>> A=[1 2 3 4 5];
>> B=[6 7 8 9 1];
>> X = bsxfun(@times,A,B(:))
X =
6 12 18 24 30
7 14 21 28 35
8 16 24 32 40
9 18 27 36 45
1 2 3 4 5
And if you want it all in one row (as your original example was) just wrap it in reshape like this:
>> X = reshape(bsxfun(@times,A(:),B),1,[])
X = 6 12 18 24 30 7 14 21 28 35 8 16 24 32 40 9 18 27 36 45 1 2 3 4 5

  2 Comments

mentalfiction
mentalfiction on 21 May 2015
Thank you so much! I'll test it out with my code now Really appreciate the help :)
Edit: It works with my code exactly how I wanted it to. Thanks once again!

Sign in to comment.

More Answers (1)

James Tursa
James Tursa on 21 May 2015
This is a simple outer product. Depending on what order you want the results,
A.'*B
or
B.'*A

  0 Comments

Sign in to comment.