Home › Category Archives › 表記法

(23) 行末の「;」入力で結果表示を抑制

octaveのコマンドを入力すると、直後にその結果が表示される。

octave:1> a=rand(5)
a =
   0.948277   0.879068   0.984755   0.911834   0.582972
   0.986024   0.469933   0.602465   0.927959   0.474812
   0.171462   0.846142   0.911001   0.727675   0.607291
   0.156386   0.785915   0.735773   0.917030   0.853956
   0.222759   0.369714   0.744204   0.013498   0.971795

このような少ない結果表示の場合は問題にならないが、計算結果が数千個、数万個と多い場合は煩わしい。

octave:2> a=rand(1000)
a =
 Columns 1 through 13:
   5.8366e-01   9.3538e-01   3.3443e-01   2.8172e-01   5.6701e-01
   7.9487e-01   3.5421e-01   3.0166e-01   7.3360e-01   4.1492e-01
   6.2559e-01   1.3823e-01   6.4445e-02   9.2671e-01   8.7322e-01
   1.7135e-01   6.3989e-01   9.7787e-01   3.2567e-02   6.2130e-01
   1.4096e-02   4.1311e-01   1.9048e-01   9.1873e-01   4.2091e-01
   7.7403e-01   7.7621e-01   2.4902e-01   6.7568e-01   2.4357e-01
   6.8968e-01   4.3378e-01   1.6004e-01   3.4825e-01   2.6041e-01
   3.4973e-01   4.4200e-01   9.0781e-01   7.0193e-01   2.0544e-01
   1.7061e-01   2.4874e-01   7.7378e-01   4.8450e-01   7.9732e-01
-- less -- (f)orward, (b)ack, (q)uit

このようなときは、コマンドの行末に「;」を付与すると、結果表示を抑制できる。

octave:3> a=rand(1000);
octave:4>

(13) octaveではclassdefは使えない

なんやら

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

行列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>

(3) Octaveで行列計算 (足し算)

Octaveを使うと行列計算が簡単にできる。
個人的にはExcelよりも便利だと思う。

まずは足し算

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

octave:3> b=[5 6 7;8 9 10;11 12 13]
b =
    5    6    7
    8    9   10
   11   12   13

octave:4> a+b
ans =
    6    8   10
   12   14   16
   18   20   22

octave:5>

ベクトルデータとスカラーデータの足し算もできる。

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

octave:6> a+1
ans =
    2    3    4
    5    6    7
    8    9   10

octave:7>

これは以下のような書き方と同じ結果となる。

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

octave:8> b=ones(3,3)
b =
   1   1   1
   1   1   1
   1   1   1

octave:9> a+b
ans =
    2    3    4
    5    6    7
    8    9   10

octave:10>

以下のような書き方でも同じ結果となる。(warningが出るけれども…)

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

octave:13> b=[1 1 1]
b =
   1   1   1

octave:14> a+b
warning: operator +: automatic broadcasting operation applied
ans =
    2    3    4
    5    6    7
    8    9   10

octave:15> b=[1;1;1]
b =
   1
   1
   1

octave:16> a+b
warning: operator +: automatic broadcasting operation applied
ans =
    2    3    4
    5    6    7
    8    9   10

octave:17>