フィルターのクリア

How to multiply a matrix by certain numbers?

1 回表示 (過去 30 日間)
Royvg94
Royvg94 2015 年 9 月 23 日
編集済み: Stephen23 2019 年 6 月 30 日
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 件のコメント
madhan ravi
madhan ravi 2019 年 6 月 30 日
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 2019 年 6 月 30 日
編集済み: Stephen23 2019 年 6 月 30 日
@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

サインインしてコメントする。

採用された回答

Stalin Samuel
Stalin Samuel 2015 年 9 月 23 日
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 件のコメント
Stephen23
Stephen23 2015 年 9 月 23 日
編集済み: Stephen23 2019 年 6 月 30 日
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.

サインインしてコメントする。

その他の回答 (1 件)

Stephen23
Stephen23 2015 年 9 月 23 日
編集済み: Stephen23 2015 年 9 月 23 日
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 件のコメント
Royvg94
Royvg94 2015 年 9 月 23 日
This one is much better, thanks! But i cant change my accepted answer right?

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by