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 Kommentare

Shubha Baravani
Shubha Baravani am 30 Jun. 2019
If x=(1 2 3 4) And if y=(2 3 4 5) How can I multiply each sample of x by each sample of y so that I get the output as Z=(2 3 4 5 4 6 8 10 6 9 12 15 8 12 16 20)
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 am 30 Jun. 2019
Bearbeitet: Stephen23 am 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

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Stalin Samuel
Stalin Samuel am 23 Sep. 2015

0 Stimmen

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 Kommentar

Stephen23
Stephen23 am 23 Sep. 2015
Bearbeitet: Stephen23 am 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Stephen23
Stephen23 am 23 Sep. 2015
Bearbeitet: Stephen23 am 23 Sep. 2015

1 Stimme

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 Kommentar

Royvg94
Royvg94 am 23 Sep. 2015
This one is much better, thanks! But i cant change my accepted answer right?

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by