(5) 演算子「*」と「.*」は何が違う?

投稿者: | 2013/07/10

行列aと行列bについて a * b と記述すると 行列の積 として計算される。

octave:1> a=ones(3,3)
a =
   1   1   1
   1   1   1
   1   1   1

octave:2> b=[1 2;3 4;5 6]
b =
   1   2
   3   4
   5   6

octave:3> a * b
ans =
    9   12
    9   12
    9   12

octave:4>

次に a .* b と記述すると、各配列要素同士の積 として計算される。

octave:5> a=ones(3,3)*2
a =
   2   2   2
   2   2   2
   2   2   2

octave:6> b=[1 2 3;4 5 6;7 8 9]
b =
   1   2   3
   4   5   6
   7   8   9

octave:7> a.*b
ans =
    2    4    6
    8   10   12
   14   16   18

octave:8>

「.*」は、配列aと配列bの少なくとも一つの次元の要素数が同じであれば計算できる。 ※warningが出るけれども…

octave:18> a=ones(3,3)
a =
   1   1   1
   1   1   1
   1   1   1

octave:19> b=[2 3 4]
b =
   2   3   4

octave:20> a.*b
warning: product: automatic broadcasting operation applied
ans =
   2   3   4
   2   3   4
   2   3   4

octave:21> b=[2;3;4]
b =
   2
   3
   4

octave:22> a.*b
warning: product: automatic broadcasting operation applied
ans =
   2   2   2
   3   3   3
   4   4   4

octave:23>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です