連立1次方程式 Ax = bをやってみる


In [2]:
# numpyをインポートして名前をnpにする.numpyのメソッドは,np.***で使える.
import numpy as np

In [3]:
# 行列
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
A


Out[3]:
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

In [4]:
# 表示
print(A)


[[1 2 3]
 [4 5 6]
 [7 8 9]]

In [5]:
# ベクトル
x = np.array([[1],[2],[3]])
print(x)


[[1]
 [2]
 [3]]

In [6]:
# 行列とベクトルの演算
b = np.dot(A, x)
print(b)


[[14]
 [32]
 [50]]

In [7]:
# こちらは違う
A * x


Out[7]:
array([[ 1,  2,  3],
       [ 8, 10, 12],
       [21, 24, 27]])

In [8]:
# わかりやすく実行すると
x = np.array([[10],[100],[1000]])
A * x


Out[8]:
array([[  10,   20,   30],
       [ 400,  500,  600],
       [7000, 8000, 9000]])

In [9]:
#  定数倍
A * 2


Out[9]:
array([[ 2,  4,  6],
       [ 8, 10, 12],
       [14, 16, 18]])

行列の初期化


In [10]:
# ゼロで初期化
A = np.zeros((3,4))
print(A)


[[ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]]

In [11]:
# 乱数で初期化(0.0から1.0の一様乱数)
A = np.random.rand(2,3)
print(A)


[[ 0.2899855   0.76067595  0.3414974 ]
 [ 0.51010709  0.29997939  0.51882348]]

In [21]:
# 乱数で初期化(標準正規分布 (平均0, 標準偏差1))
A = np.random.randn(2,3)
print(A)


[[-1.86812026 -0.40187607  0.00460487]
 [ 0.70350228 -0.28636855 -1.41275778]]

In [40]:
# せっかくなので標準正規分布を描いてみよう
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt

x = np.random.randn(10000)
y = plt.hist(x, bins=50) # binsは区切る個数

plt.show()


固有値,固有ベクトル


In [41]:
A = np.array([[6,2],[2,3]])

In [52]:
la, v = np.linalg.eig(A)
print(la)
print(v)
print(2/np.sqrt(5), 1/np.sqrt(5))
print(-1/np.sqrt(5), 2/np.sqrt(5))
print(v[0])
print(v[:,0])


[ 7.  2.]
[[ 0.89442719 -0.4472136 ]
 [ 0.4472136   0.89442719]]
0.894427191 0.4472135955
-0.4472135955 0.894427191
[ 0.89442719 -0.4472136 ]
[ 0.89442719  0.4472136 ]

逆行列,転置,内積


In [65]:
A = np.array([[1,2],[3,4]])
print(A)


[[1 2]
 [3 4]]

In [66]:
invA = np.linalg.inv(A)
print(invA)


[[-2.   1. ]
 [ 1.5 -0.5]]

In [67]:
np.dot(invA, A)


Out[67]:
array([[  1.00000000e+00,   0.00000000e+00],
       [  2.22044605e-16,   1.00000000e+00]])

In [69]:
a = np.array([1,2,3])
b = np.array([10,20,30])
np.dot(a,b)


Out[69]:
140

In [ ]: