線性代數
矩陣運算
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