陳鍾誠

Version 1.0

線性代數

矩陣運算

import numpy as np

A = np.array([[3, 6, 7], [5, -3, 0]])
B = np.array([[1, 1], [2, 1], [3, -3]])
C = A.dot(B)

print(C)

執行

$ python matrix1.py

[[ 36 -12]
 [ -1   2]]

特徵向量 (Eigen Vector)

import numpy as np
from scipy import linalg

A = np.array([[1, -0.3], [-0.1, 0.9]])
print(linalg.eig(A))

執行

$ python eigen1.py

(array([1.13027756+0.j, 0.76972244+0.j]), array([[ 0.91724574,  0.79325185],      
       [-0.3983218 ,  0.60889368]]))

SVD 分解

import numpy as np

a = [[1,2,3], [4,5,6]]

u,s,vh = np.linalg.svd(a, full_matrices=True)

print('u=', u, '\ns=', s, '\nvh=', vh)

執行

$ python svd1.py

u= [[-0.3863177  -0.92236578]
 [-0.92236578  0.3863177 ]] 
s= [9.508032   0.77286964] 
vh= [[-0.42866713 -0.56630692 -0.7039467 ]
 [ 0.80596391  0.11238241 -0.58119908]
 [ 0.40824829 -0.81649658  0.40824829]]

最小平方法

import numpy as np
from scipy import optimize

X = np.array([8.19, 2.72, 6.39, 8.71, 4.7, 2.66, 3.78])
Y = np.array([7.01, 2.78, 6.47, 6.71, 4.1, 4.23, 4.05])

def residuals(p):
  k, b = p
  return Y - (k*X+b)

r = optimize.leastsq(residuals, [1,0])
k,b = r[0]
print('k=', k, 'b=', b)

執行

$ python leastSquare1.py

k= 0.6134953491930442 b= 1.794092543259387