見出し画像

「Deep Learning」って何?--ちょっと一息(Pythonで行列)

ここで「Deep Learning」に必要なことをPythonで実装する方法を見ていきます。

まず行列です。Numpyで行列式を実行してみましょう!

numpy.dot(np.dot)はよく使うのでそこから始めましょう。

import numpy as np
a = np.array([1,2])
b = np.array([3,4])
np.dot(a,b)  //11

とすると、答えは「11」とでました。

1 x 3 + 2*4 = 11 

ですね。

2乗もできます。

np.dot(a,a) //5

5と出ます。

2×2の行列同士の積は

a = np.array([[1,2], [3,4]])
b = np.array([[4, 3], [2,1]])
np.dot(a,b)
array([[ 8, 5],
[20, 13]])

と出ます。

次は配列の行と列の変更してみましょう。

c = np.arange(9)

とすると

array([0, 1, 2, 3, 4, 5, 6, 7, 8])

の配列が作成されます。

この配列を3列、3行の配列に変更します。

c.reshape(3,3)

とすると

array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])

としてくれます。

np.arange(9).reshape(3,3)

とやっても同じことができます。

行列の積で気をつけないといけない事があります。

a = np.array([[1,2,3],[4,5,4]])
b = np.array([[1,2],[3,4]])

2つの積をします。まず形状を確認しておきます。

a.shape //(2, 3)

b.shape //(2,2)
np.dot(a,b)

エラーが出ます。

ValueError Traceback (most recent call last)
<ipython-input-19-3339b236d1c5> in <module>()
----> 1 np.dot(a,b)
ValueError: shapes (2,3) and (2,2) not aligned: 3 (dim 1) != 2 (dim 0)
shapes (2,3) and (2,2) not aligned: 3 (dim 1) != 2 (dim 0)

ですね。(2,3)の(dim 1)、すなわち1次元目(1番目)の3と(2,2)の2次元目(0番目)2が同じ出ない、違うよ!とメッセージが出てきます。

ここを揃えてやらないといけないという事です。

行数が1行の場合,

a = np.array([1,2,3])
b = np.array([[1,2,3],[3,4,6]])
a.shape  //(3,)

b.shape //(2, 3)
ValueError Traceback (most recent call last)
<ipython-input-37-3339b236d1c5> in <module>()
----> 1 np.dot(a,b)
ValueError: shapes (3,) and (2,3) not aligned: 3 (dim 0) != 2 (dim 0)

エラーがでます。

行数が1行の場合は

ValueError: shapes (3,) and (2,3) not aligned: 3 (dim 0) != 2 (dim 0)

にもあるように、

a.shape  //(2,)

b.shape //(2, 3)

にしてやればできるはずです

a = np.array([1,2])
b = np.array([[1,2,3],[3,4,6]])

で実行すると

array([ 7, 10, 15])

と計算できました!

この記事が気に入ったらサポートをしてみませんか?