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)分布中抽取样本
发布了27 篇原创文章 · 获赞 9 · 访问量 991

猜你喜欢

转载自blog.csdn.net/sinat_42574069/article/details/102988558