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>

(20) quiverでベクトル場を描く

始点(x,y)=(1,2)から、XY方向成分(3,2)のベクトルと、
始点(x,y)=(3,5)から、XY方向成分(-1,-4)のベクトルを quiver で描いてみる。

(1)まずは1本ずつ描く場合

octave:1> quiver(1,2,3,2)
octave:2> hold on
octave:3> quiver(3,5,-1,-4)
octave:4> hold off

https://octave.dogrow.net/wp-content/uploads/2013/08/20130828_02_001.jpg

(2)2本のベクトルを行列でまとめて記述する場合

octave:5> v=[1 2 3 2;3 5 -1 -4]
v =
   1   2   3   2
   3   5  -1  -4

octave:6> quiver(v(:,1),v(:,2),v(:,3),v(:,4))

https://octave.dogrow.net/wp-content/uploads/2013/08/20130828_02_002.jpg
両ベクトルの始点は上記(1)と同じだが、上記(1)とはベクトルの長さが異なる…
なぜか?

これは、quiver 内部でベクトル同士が重なり合わないように線の長さ(=scale)を自動調整してくれているから
quiverの第5パラメーターでこのscaleを指定可能。

例えば、両ベクトルの長さを自動調整した長さの30%(scale=0.3)に縮めてみる。

octave:7> quiver(v(:,1),v(:,2),v(:,3),v(:,4),0.3)

https://octave.dogrow.net/wp-content/uploads/2013/08/20130828_02_003.jpg

自動調整をやめさせたい場合は scale=0 を指定すればよい。

octave:8> quiver(v(:,1),v(:,2),v(:,3),v(:,4),0)

https://octave.dogrow.net/wp-content/uploads/2013/08/20130828_02_001.jpg
これで上記(1)と同じように表示された。

(19) csvread()でCSVファイルのデータをロード

こんなCSVファイルを用意した。

[user@dog-server]$ cat test.csv
10,1
20,6
30,18
40,11
50,14
[user@dog-server$

このCSVファイルを csvread でロードする。

octave:5> M=csvread('test.csv')
M =
   10    1
   20    6
   30   18
   40   11
   50   14

octave:6>

ロードしたデータを折れ線グラフで表示してみる。

octave:7> plot(M(:,1),M(:,2))

http://octave.dogrow.net/wp-content/uploads/2013/08/20130828_001.jpg

折れ線グラフではなく、赤色「r」のマーカー「+」でプロットしてみる。

octave:8> plot(M(:,1),M(:,2),'r+')

http://octave.dogrow.net/wp-content/uploads/2013/08/20130828_002.jpg

今度は棒グラフで表示してみる。

octave:9> bar(M(:,1),M(:,2))

http://octave.dogrow.net/wp-content/uploads/2013/08/20130828_003.jpg

(17) rand()とrandn()で乱数生成

rand()は一様分布の乱数生成、randn()は正規分布に従った乱数生成をしてくれる。

(1) まずはrand()で200×200個の乱数を生成し、ヒストグラムでその分布を見てみる。

octave:1> a=rand(200);          % 200x200個の0.0~1.0までの一様乱数を生成
octave:2> b=a*100; c=floor(b);  % 生成した乱数を0~100の整数に変換
octave:3> hist(c)               % ヒストグラム表示

結果は以下のようになった。確かに0~100の全範囲に渡って均等に乱数が生成されている。

(2) 次に、randn()で200×200個の乱数を生成し、ヒストグラムでその分布を見てみる。

octave:1> a=randn(200);         % 200x200個の0.0~1.0までの正規分布乱数を生成
octave:2> b=a*100; c=floor(b);  % 生成した乱数を0~100の整数に変換
octave:3> hist(c)               % ヒストグラム表示

結果は以下のようになった。正規分布に従って乱数が生成されている。

(16) eye()で単位行列を作る

eye()を使うと任意のサイズの単位行列を作ることができる。

octave:1> eye(2)
ans =

Diagonal Matrix

   1   0
   0   1

octave:2> eye(3)
ans =

Diagonal Matrix

   1   0   0
   0   1   0
   0   0   1

octave:3> eye(5)
ans =

Diagonal Matrix

   1   0   0   0   0
   0   1   0   0   0
   0   0   1   0   0
   0   0   0   1   0
   0   0   0   0   1

octave:4> eye(10)
ans =

Diagonal Matrix

   1   0   0   0   0   0   0   0   0   0
   0   1   0   0   0   0   0   0   0   0
   0   0   1   0   0   0   0   0   0   0
   0   0   0   1   0   0   0   0   0   0
   0   0   0   0   1   0   0   0   0   0
   0   0   0   0   0   1   0   0   0   0
   0   0   0   0   0   0   1   0   0   0
   0   0   0   0   0   0   0   1   0   0
   0   0   0   0   0   0   0   0   1   0
   0   0   0   0   0   0   0   0   0   1

octave:5>

(9) ones()で全要素の値が1の配列を作る

ones()は、任意の次数、要素数で、全要素の値が1の配列を作ることができる。

octave:1> ones(1)
ans =  1

octave:2> ones(2)
ans =
   1   1
   1   1

octave:3> ones(3)
ans =
   1   1   1
   1   1   1
   1   1   1

octave:4> ones(1,2)
ans =
   1   1

octave:5> ones(2,1)
ans =
   1
   1

octave:6> ones(2,3)
ans =
   1   1   1
   1   1   1

octave:7> ones(2,3,4)
ans =

ans(:,:,1) =
   1   1   1
   1   1   1

ans(:,:,2) =
   1   1   1
   1   1   1

ans(:,:,3) =
   1   1   1
   1   1   1

ans(:,:,4) =
   1   1   1
   1   1   1

octave:8> ones(1,3)*2
ans =
   2   2   2

octave:9> ones(4,2)*3
ans =
   3   3
   3   3
   3   3
   3   3

octave:10>

(8) zeros()で全要素の値が0の配列を作る

zeros()は、任意の次数、要素数で、全要素の値が0の配列を作ることができる。

octave:6> zeros(1)
ans = 0

octave:7> zeros(2)
ans =
   0   0
   0   0

octave:8> zeros(3)
ans =
   0   0   0
   0   0   0
   0   0   0

octave:9> zeros(1,1)
ans = 0

octave:10> zeros(1,2)
ans =
   0   0

octave:11> zeros(2,1)
ans =
   0
   0

octave:12> zeros(2,2)
ans =
   0   0
   0   0

octave:13> zeros(2,3)
ans =
   0   0   0
   0   0   0

octave:14> zeros(2,3,4)
ans =

ans(:,:,1) =
   0   0   0
   0   0   0

ans(:,:,2) =
   0   0   0
   0   0   0

ans(:,:,3) =
   0   0   0
   0   0   0

ans(:,:,4) =
   0   0   0
   0   0   0

octave:15>

(7) numel()で配列の要素数を見る

numel( A ) は、指定した変数Aの全要素数を返す。

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

octave:2> numel(a)
ans =  9

octave:3> b=repmat(a,[2 1])
b =
   1   2   3
   4   5   6
   7   8   9
   1   2   3
   4   5   6
   7   8   9

octave:4> numel(b)
ans =  18

octave:5> c=repmat(a,[2 3])
c =
   1   2   3   1   2   3   1   2   3
   4   5   6   4   5   6   4   5   6
   7   8   9   7   8   9   7   8   9
   1   2   3   1   2   3   1   2   3
   4   5   6   4   5   6   4   5   6
   7   8   9   7   8   9   7   8   9

octave:6> numel(c)
ans =  54

octave:17>

(6) size()で配列の要素数を見る

size( A ) は、配列Aの各次元の要素数を見ることができる。

octave:5> a=[1 2 3;4 5 6]
a =
   1   2   3
   4   5   6
octave:6> size(a)
ans =
   2   3

size( A, B ) は、配列Aの第B次元の要素数を見ることができる。

octave:7> size(a,1)
ans =  2
octave:8> size(a,2)
ans =  3

サイズ情報を表示させるのではなく、直接変数に入れることもできる。

octave:9> b = size(a)
b =
   2   3
octave:10> [b,c] = size(a)
b =  2
c =  3