LoginSignup
5
5

More than 5 years have passed since last update.

Courseraの機械学習コース2週目 Octave/Matlab チュートリアルをやってみた。

Posted at

Courseraの機械学習コースを視聴しています。このコースはたまに演習問題がでるのでその問題をやってみました。

今回の問題は2週目のラストにあるOctaveの演習クイズです。基本的にOctaveで実行すればすぐわかります。ただ行列について全く知識がなかったので復習です。

P.S. このコースのクイズを自力で問題を解きたい方は読まないでください。

一問目

OctaveかMatlabで動作するみたいです。

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

AとBのような行列があるときに、有効なコマンドを選択してください。

選択肢1
C = A' + B;
選択肢2
C = B * A;
選択肢3
C = A + B;
選択肢4
C = B' * A;

行列を書いてみると以下のようになります。

A = \begin{pmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{pmatrix}
B = \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{pmatrix}

選択肢1

C = A' + B;になるとAの転置行列とBの加算は以下のようになりますので計算できます。

\begin{pmatrix} 2 & 5 & 8 \\ 6 & 9 & 12 \end{pmatrix} = \begin{pmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \end{pmatrix} + \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{pmatrix}

選択肢2

C = B * A;は行列の掛け算です。

\begin{pmatrix} 22 & 28 \\ 49 & 64 \end{pmatrix} = \begin{pmatrix} 1+6+15 & 2+8+18 \\ 4+15+30 & 8+20+36 \end{pmatrix} = \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{pmatrix}\begin{pmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{pmatrix}

選択肢3

C = A + B;は行と列が合っていないのでOctaveで計算するとエラーがでます。

選択肢4

C = B' * A;の計算は行と列があっていないのでOctaveで計算するとエラーがでます。

二問目

行列Aが与えられているときに、行列Bを表すものを選びなさいという問題です。

A = \begin{pmatrix} 16 & 2 & 3 & 13 \\ 5 & 11 & 10 & 8 \\ 9 & 7 & 6 & 12 \\ 4 & 14 & 15 & 1 \end{pmatrix}
B = \begin{pmatrix} 16 & 2 \\ 5 & 11 \\ 9 & 7 \\ 4 & 14 \end{pmatrix}
選択肢1
B = A(:, 1:2);
選択肢2
B = A(1:4, 1:2);
選択肢3
B = A(0:2, 0:4)
選択肢4
B = A(1:2, 1:4);

選択肢1

B = A(:, 1:2);これを実行すると4行2列のBと同じ行列が出力されます。

選択肢2

選択肢2と同じです。

選択肢3

B = A(0:2, 0:4)は実行するとエラーが出ます。

error: subscript indices must be either positive integers less than 2^31 or logicals

プラスの整数じゃないとダメとあります。行列のインデックスは1から指定しないとだめってことですかね。

選択肢4

B = A(1:2, 1:4);こちらは2行4列の行列になるので間違いです。

三問目

行列Aが10行10列の行列で、xが10個の要素のベクトルであるときに、友人はAxを以下のコードで計算したいと思いました。

v = zeros(10, 1);
for i = 1:10
  for j = 1:10
    v(i) = v(i) + A(i, j) * x(j);
  end
end

ループのコードを書かずにベクトル化する場合に当てはまるものを選びなさい。

選択肢1
v = A * x;
選択肢2
v = Ax;
選択肢3
v = x' * A;
選択肢4
v = sum (A * x);

準備

Octaveで計算する場合はvの値を調べればOKです。
xとAを以下のように適当に設定すると計算できました。

A = magic(10);
x = [1;2;3;4;5;6;7;8;9;10]; 

選択肢1

ループの式を見ると普通の掛け算なのでこれが正解。

選択肢2

Octaveで実際に試すとわかるのですが、エラーがでます。

error: 'Ax' undefined near line 1 column 1

選択肢3

xの転置行列との掛け算です。行列の掛け算は場所を転置行列にして入れ替えると掛け算は可能になりますが、値は等しくなりません。

選択肢4

sumがついているので、全部足されてしまいます。よって間違いです。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5