「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])
と計算できました!
この記事が気に入ったらサポートをしてみませんか?