すごブロ

「好き」をブチ抜く

本、映画、科学、哲学、心理、すごい人の考え方、など。

行列をpythonで

なぜ行列を使いたいのか?

行列を使うとたくさんの連立方程式を一つの式で表せる。行列表記がとても便利。

  • リストとベクトルは違う!
a0 = [1,2,3] + [1,2,3]

>>[1, 2, 3, 1, 2, 3]
  • ベクトルはnumpyで
import numpy as np
x1 = np.array([1,2,3])
print(x1)
x2 = np.array([4,5,6])
print(x1 + x2)

>>[1 2 3]
>>[5 7 9]
  • 連続した整数のベクトルの作成
print(np.arange(10))
print(np.arange(5,10))

>>[0 1 2 3 4 5 6 7 8 9]
>>[5 6 7 8 9]
  • 行列の定義
x3 = np.array([[1,2,3],[2,3,4]])
print(x3)

>>[[1 2 3]
   [2 3 4]]
  • 行列のサイズ
print(x3.shape)

>>(2, 3)
  • 要素が0や1の行列の作成
print(np.zeros(10))
print(np.zeros((2,10)))
print(np.ones((2,10)))

>>[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
[[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]]
[[ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]
 [ 1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]]
  • 行列の積

行列の型に注意。計算できない場合あり。
行列の積( dot( ) ) と、要素同士の積の違いに注意。

A = np.array([[1,2,3],[-1,-2,-3]])
B = np.array([[4,-4],[5,-5],[6,-6]])
print(A.dot(B))
print(A*B)

>>[[ 14 -14]
 [-14  14]]
[[ 4 -8]
 [-5 10]]
I = np.identity(3)
I2 = np.identity(4)
print( I )
A2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(A2.dot(I))

>>[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]
[[ 1.  2.  3.]
 [ 4.  5.  6.]
 [ 7.  8.  9.]]
C = np.array([[1,2],[3,4]])
invC = np.linalg.inv(C)
print(invC)

>>[[-2.   1. ]
 [ 1.5 -0.5]]
  • 転置
D = np.array([[1,2,3],[4,5,6]])
print(D)
print(D.T)

>>[[1 2 3]
 [4 5 6]]
[[1 4]
 [2 5]
 [3 6]]