numpyを使ってみる

numpyをインポートします。

行列計算を行っていくにはnumpyが基本になります。
numpyで変数を定義し、デフォルトで配列を使っていくイメージです。
配列の演算を行うとき、Cではforを使って一つずつ回していたものをなるべくnumpyの関数を用いて実装する事で、処理が高速になります。

例えばベクトルの内積はこちら。Notebookに下記のように打ち込んで、Runを押すと結果が見れます。

import numpy as np
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
z = np.dot(x, y)
print(z)

>> 32

内積なので、1×4 + 2×5 + 3×6 = 4 + 10 + 18 = 32 ですね。うん合ってる。
ベクトルの内積だけでなく、行列の内積も同じです。

import numpy as np
x = np.array([[1, 2], [3, 4], [5, 6]])
y = np.array([[7, 8, 9], [10, 11, 12]])
z = np.dot(x, y)
print(z)

>> [ [ 27  30  33]
     [ 61  68  75]
     [ 95 106 117] ]

行列計算になると一気に数字が増えますね。
この例ですと、xは3×2行列、yは2×3行列となり、zは3×3行列となります。
行の数と列の数を明示的に示す場合に、

x = np.array([ [1, 2],
               [3, 4], 
               [5, 6] ])

とあらわす場合もあるようです。
行 : 横長1セットが3つ、
列 : 縦長1セットが2つ、
ですので、3×2行列です。
数学での行列計算と同じく、xの列の数とyの行の数が一致しないと計算できないので注意してください。

場合によっては転置が必要な場合もあります。
Pythonでの転置行列は.Tです。

print(x.T)
>> [ [1 3 5]
     [2 4 6] ]

この辺りをうまく使って、for文をなるべく回避するのが、Pythonプログラムの基本のようです。