linalg=linear+algebra,norm則表示範數,首先需要注意的是範數是對向量(或者矩陣)的度量,是乙個標量(scalar):
這裡只對常用設定進行說明,x表示要度量的向量,ord表示範數的種類,
範數理論的乙個小推論告訴我們:ℓ1≥ℓ2≥ℓ∞(2)、用dot函式計算矩陣乘積
x = np.array([[1., 2., 3.], [4., 5., 6.]])
print(x) #[[1. 2. 3.]
#[4. 5. 6.]]
y = np.array([[6., 23.], [-1, 7], [8, 9]])
print(y) #[[ 6. 23.]
#[-1. 7.]
#[ 8. 9.]]
print(x.dot(y)) # 相當於np.dot(x,y)
#[[ 28. 64.]
#[ 67. 181.]]
(3)、np.linalg.inv():矩陣求逆
x = np.array([[1,2],[3,4]])
print(x) #[[1 2]
#[3 4]]
print(x.t) #x的轉置
#[[1 3]
#[2 4]]
print(x.t.dot(x)) #x的轉置乘以x
#[[10 14]
#[14 20]]
print(np.linalg.inv(x.t.dot(x))) #求逆
#[[5. - 3.5]
#[-3.5 2.5]]
(4)、求解線性方程組
# numpy.linalg中的函式solve可以求解形如 ax = b 的線性方程組,其中 a 為矩陣,b 為一維或二維的陣列,x 是未知變數
import numpy as np
#建立矩陣和陣列
b = np.mat("1 -2 1;0 2 -8;-4 5 9")
b = np.array([0,8,-9])
# 呼叫solve函式求解線性方程
x = np.linalg.solve(b,b)
print (x) #[ 29. 16. 3.]
# 使用dot函式檢查求得的解是否正確
print (np.dot(b , x)) # [[ 0. 8. -9.]]
(5)、特徵值和特徵向量
# 特徵值(eigenvalue)即方程 ax = ax 的根,是乙個標量。其中,a 是乙個二維矩陣,x 是乙個一維向量。特徵向量(eigenvector)是關於特徵值的向量
# numpy.linalg模組中,eigvals函式可以計算矩陣的特徵值,而eig函式可以返回乙個包含特徵值和對應的特徵向量的元組
import numpy as np
# 建立乙個矩陣
c = np.mat("3 -2;1 0")
# 呼叫eigvals函式求解特徵值
c0 = np.linalg.eigvals(c)
print (c0)
# [ 2. 1.]
# 使用eig函式求解特徵值和特徵向量 (該函式將返回乙個元組,按列排放著特徵值和對應的特徵向量,其中第一列為特徵值,第二列為特徵向量)
c1,c2 = np.linalg.eig(c)
print (c1) # [ 2. 1.]
print (c2)
#[[ 0.89442719 0.70710678]
# [ 0.4472136 0.70710678]]
# 使用dot函式驗證求得的解是否正確
for i in range(len(c1)):
print ("left:",np.dot(c,c2[:,i]))
print ("right:",c1[i] * c2[:,i])
#left: [[ 1.78885438]
# [ 0.89442719]]
#right: [[ 1.78885438]
# [ 0.89442719]]
#left: [[ 0.70710678]
# [ 0.70710678]]
#right: [[ 0.70710678]
# [ 0.70710678]]
(6)、奇異值分解
# svd(singular value decomposition,奇異值分解)是一種因子分解運算,將乙個矩陣分解為3個矩陣的乘積
# numpy.linalg模組中的svd函式可以對矩陣進行奇異值分解。該函式返回3個矩陣——u、sigma和v,其中u和v是正交矩陣,sigma包含輸入矩陣的奇異值。
import numpy as np
# 分解矩陣
d = np.mat("4 11 14;8 7 -2")
# 使用svd函式分解矩陣
u,sigma,v = np.linalg.svd(d,full_matrices=false)
print ("u:",u)
#u: [[-0.9486833 -0.31622777]
# [-0.31622777 0.9486833 ]]
print ("sigma:",sigma)
#sigma: [ 18.97366596 9.48683298]
print ("v",v)
#v [[-0.33333333 -0.66666667 -0.66666667]
# [ 0.66666667 0.33333333 -0.66666667]]
# 結果包含等式中左右兩端的兩個正交矩陣u和v,以及中間的奇異值矩陣sigma
# 使用diag函式生成完整的奇異值矩陣。將分解出的3個矩陣相乘
print (u * np.diag(sigma) * v)
#[[ 4. 11. 14.]
# [ 8. 7. -2.]]
(7)、 廣義逆矩陣
# 使用numpy.linalg模組中的pinv函式進行求解,
# 注:inv函式只接受方陣作為輸入矩陣,而pinv函式則沒有這個限制
import numpy as np
# 建立乙個矩陣
e = np.mat("4 11 14;8 7 -2")
# 使用pinv函式計算廣義逆矩陣
pseudoinv = np.linalg.pinv(e)
print (pseudoinv)
#[[-0.00555556 0.07222222]
# [ 0.02222222 0.04444444]
# [ 0.05555556 -0.05555556]]
# 將原矩陣和得到的廣義逆矩陣相乘
print (e * pseudoinv)
#[[ 1.00000000e+00 -5.55111512e-16]
# [ 0.00000000e+00 1.00000000e+00]]
(8)、行列式
# numpy.linalg模組中的det函式可以計算矩陣的行列式
import numpy as np
# 計算矩陣的行列式
f = np.mat("3 4;5 6")
# 使用det函式計算行列式
print (np.linalg.det(f)) # -2.0
Python筆記 Numpy之線性代數
常用的numpy.linalg函式 np.linalg.diag 以一維陣列的形式返回方陣的對角線 或非對角線 元素,或將一維陣列轉換為方陣 非對角線元素為0 np.linalg.dot 矩陣乘法 np.linalg.trace 計算對角線元素的和 np.linalg.det 計算矩陣行列式 np....
python之Numpy學習筆記
1.匯入numpy庫 import numpy as np2.生成陣列 重要函式 作用 示例 np.array x 將輸入資料轉化為乙個ndarray a list list range 10 b np.array a list np.array x,dtype 將輸入資料轉化為乙個型別為type的...
Python 之 Numpy 三 運算
import numpy as np 加減 a np.array 10,20,30,40 b np.arange 4 c a b print a,b print c 執行結果 10 20 30 40 0 1 2 3 10 19 28 37 三角函式 a np.array 10,20,30,40 b ...