ピヨピヨ日記 シンガポール編

シンガポール生活の日記とかいろいろ

Octave の練習2

適当にざっくり練習メモ

3x2 matrix をつくる

> A = [1 2; 3 4; 5 6]
A =

   1   2
   3   4
   5   6

matrix のサイズを確認

> size(A)
ans =

   3   2

サイズ自体もマトリクスで表現されているので、サイズのサイズを確認すると、1x2 のマトリクスであることがわかる

> size(size(A))
ans =

   1   2

つぎのようにすると、行数と列数のそれぞれの大きさを取得できる

> size(A,1)
ans =  3
> size(A,2)
ans =  2


Vector の長さは次のようなかんじで取得できる

> v = [1 2 3 4]
v =

   1   2   3   4

> length(v)
ans =  4

Octave の中でも、つぎのようなUNIXコマンドが使える

pwd
cd
ls

データのロードの方法。
たとえば、つぎのようなテキストファイルを用意する。

octave_practice_sample_data01.txt

1
2
3
4
5
6
7
8
9
10

これをロードするには、ファイルがあるディレクトリまでいって、次のコマンドを実行する

load ファイル名

> load octave_practice_sample_data01.txt

who コマンドを実行すると、今どのようなデータがメモリ上にあるかがわかる。
octave_practice_sample_data01 があることを確認。

> who
Variables in the current scope:

A                              t                              y
ans                            v                              z
octave_practice_sample_data01  x

whos でより詳細な情報を取得できる。

> whos
Variables in the current scope:

   Attr Name                               Size                     Bytes  Class
   ==== ====                               ====                     =====  ===== 
        A                                  3x2                         48  double
        ans                                1x1                          8  double
        octave_practice_sample_data01     10x1                         80  double
        t                                  1x1                          8  double
        v                                  1x4                         32  double
        x                                  1x1                          8  double
        y                                  1x1                          8  double
        z                                  1x1                          8  double

Total is 25 elements using 200 bytes

実際に octave_practice_sample_data01 の中身を見てみる

> octave_practice_sample_data01
octave_practice_sample_data01 =

    1
    2
    3
    4
    5
    6
    7
    8
    9
   10


clear のあとに変数名でデータを消すことができる。

clear 変数名

> clear t v x y z
> who
Variables in the current scope:

A                              ans                            octave_practice_sample_data01

つぎのようにすることで、1から3個までのデータを取得することができる

> v = octave_practice_sample_data01(1:3)
v =

   1
   2
   3

データは次のようにして保存できる。

save ファイル名 保存したい変数名;

save hello.mat v

保存したデータは次のようにしてロードすることができる。

load ファイル名

> clear % データを全部消す
> who % 何もデータがないことを確認
> load hello.mat % データをロード
> whos
Variables in the current scope:

   Attr Name        Size                     Bytes  Class
   ==== ====        ====                     =====  ===== 
        v           3x1                         24  double

Total is 3 elements using 24 bytes

ちなみに、データはデフォルトではバイナリ形式で保存されるため、読むことのできる形で保存する場合は、-ascii オプションをつける。
(と授業で習ったんだけど、ぼくの環境では、デフォルトでもバイナリで保存されているわけではなさそう)

save hello2.mat v -ascii


ここからマトリクスの計算をざっくり駆け足で。

特定の行、列の値を取得。
A(3,2) でマトリクスAの3行, 2列 めの値を取得できる

> A = [1 2; 3 4; 5 6]
A =

   1   2
   3   4
   5   6

> A(3,2)
ans =  6

n行目の値すべてを取得したい場合は、A(n,:) といったように書く。

> A
A =

   1   2
   3   4
   5   6

> A(2,:)
ans =

   3   4

n列目の値すべてを取得したい場合は、A(:,n) といったように書く。

> A
A =

   1   2
   3   4
   5   6

> A(:,2)
ans =

   2
   4
   6

n行目とm行目の値すべてを取得したい場合は、A([n m],:) といったように書く。

> A
A =

   1   2
   3   4
   5   6

> A([1 3], :)
ans =

   1   2
   5   6

データを代入することももちろんできる

マトリクスAの2列目の値を入れ替えたい場合は、つぎのようにかける

> A
A =

   1   2
   3   4
   5   6

> A(:,2) = [10; 11; 12]
A =

    1   10
    3   11
    5   12

また、つぎのようにすると、列を追加できる

> A
A =

    1   10
    3   11
    5   12

> A = [A, [100; 101; 102]]
A =

     1    10   100
     3    11   101
     5    12   102

つぎのようにすると、行を追加できる

>  A = [A; [7 13 103]]
A =

     1    10   100
     3    11   101
     5    12   102
     7    13   103

A(:) とすると、Aをひとつのベクターとして返す

> A
A =

     1    10   100
     3    11   101
     5    12   102
     7    13   103

> A(:)
ans =

     1
     3
     5
     7
    10
    11
    12
    13
   100
   101
   102
   103

まとめると、マトリクスへの行または列の追加はつぎのようなかんじ

> A = [1 2; 3 4; 5 6]
A =

   1   2
   3   4
   5   6

> B = [11 12; 13 14; 15 16];
> [A B]
ans =

    1    2   11   12
    3    4   13   14
    5    6   15   16

> [A;B]
ans =

    1    2
    3    4
    5    6
   11   12
   13   14
   15   16