線性代數
線性代數,比如矩陣乘法、分解、行列式等方陣數學,是所有數組類庫的重要組成部分。和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(數學核心庫)。
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)分佈中抽取樣本