Python之Numpy庫(9)

線性代數

線性代數,比如矩陣乘法、分解、行列式等方陣數學,是所有數組類庫的重要組成部分。和Matlab等其他語言相比,Numpy的線性代數中所不同的是*是矩陣的逐元素乘積,而不是矩陣的點乘積。因此Numpy的數組方法和numpy命名空間中都有一個函數dot,用於矩陣的操作:

x = np.array([[1., 2., 3.], [4., 5., 6.]])
y = np.array([[6., 23.], [-1, 7], [8, 9]])

print(x)
print(y)

#
[[1. 2. 3.]
 [4. 5. 6.]]
[[ 6. 23.]
 [-1.  7.]
 [ 8.  9.]]

x.dot(y)等價於np.dot(x, y)

print(np.dot(x, y))

#
[[ 28.  64.]
 [ 67. 181.]]

一個二維數組和一個長度合適的一維數組之間的矩陣乘積,其結果是一個一維數組:

print(np.dot(x, np.ones(3)))

#
[ 6. 15.]

特殊符號@也作爲中綴操作符,用於點乘矩陣操作:

print(x @ np.ones(3))

#
[ 6. 15.]

numpy.linalg擁有一個矩陣分解的標準函數集,以及其他常用函數,例如求逆和行列式求解。這些函數都是通過在MATLAB和R等其他語言使用的相同的行業標準線性代數庫來實現的,例如BLAS、LAPACK或英特爾專用的MKL(數學核心庫)。

 

常用numpy.linalg函數
diag 將一個方陣的對角(或非對角)元素作爲一維數組返回,或者將一維數組轉換成一個方陣,並且在非對角線上有零點
dot 矩陣點乘
trace 計算對角元素和
det 計算矩陣的行列式
eig

計算方陣的特徵值和特徵向量

inv 計算方陣的逆矩陣
pinv 計算矩陣的Moore-Penrose僞逆
qr 計算QR分解
svd 計算奇異值分解(SVD)
solve 求解x的線性系統Ax=b,其中A是方陣
lstsq

計算Ax=b的最小二乘解

 

 

 

 

 

 

 

 

 

 

 

 

僞隨機數生成

numpy.random模塊填補了Python內建的random模塊的不足,可以高效地生成多種概率分佈下的完整樣本值數組。例如,可以使用normal來獲得一個4X4的正態分佈樣布數組:

samples = np.random.normal(size=(4, 4))
print(samples)

#
[[ 0.19126673  1.00933806  1.56623026  0.19216111]
 [-1.63528126 -0.3591005   2.11737578 -0.54024645]
 [-0.1835273   0.85379703 -0.6074602  -1.40270405]
 [-0.21243456  0.13365176 -0.19936023 -1.02825159]]

numpy.random中的部分函數列表

seed 向隨機數生成器傳遞隨機狀態種子 permutation 返回一個序列的隨機排列,或者返回一個亂序的整數範圍序列 shuffle 隨機排列一個序列 rand 從均勻分佈中抽取樣本 randint 根據給定的由低到高的範圍抽取隨機整數 randn 從均值0方差1的正態分佈中抽取樣本(MATLAB型接口) binomial 從二項分佈中抽取樣本 normal 從正態(高斯)分佈中抽取樣本 beta 從beta分佈中抽取樣本 chisquare 從卡方分佈中抽取樣本 gamma 從伽馬分佈中抽取樣本 uniform 從均勻[0,1)分佈中抽取樣本

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章