1 线性代数
线性代数:矩阵乘法,矩阵分解,行列式
对于矩阵的点乘,numpy提供了dot函数(既是一个数组方法也是numpy命名空间中的一个函数)
>>> import numpy as np
>>> x = np.arange(12).reshape(3,4)
>>> y = np.arange(12).reshape(4,3)
>>> x.dot(y)
array([[ 42, 48, 54],
[114, 136, 158],
[186, 224, 262]])
#等价于np.dot()
>>> np.dot(x,y)
array([[ 42, 48, 54],
[114, 136, 158],
[186, 224, 262]])
numpy.linalg 提供了标准的矩阵分解运算以及求逆,行列式等。和其他软件如MATLAB,R语言使用的相同的行业标准库。
常用的numpy.linalg函数有:
>>> a = np.random.randn(3,3)
>>> a
array([[ 0.71458949, 0.90514428, 0.38363381],
[ 0.23840368, 1.02315202, 0.53776915],
[-0.08931064, -0.64996291, -0.92333862]])
#行列式
>>> mat = a.T.dot(a)
>>> mat
array([[0.57545084, 0.94877839, 0.48481079],
[0.94877839, 2.28857801, 1.49759939],
[0.48481079, 1.49759939, 1.28892476]])
#求逆
>>> np.linalg.inv(mat)
array([[ 8.18343432, -5.75098632, 3.60397793],
[-5.75098632, 5.86464814, -4.65097225],
[ 3.60397793, -4.65097225, 4.82421164]])
#A.A-1
>>> mat.dot(np.linalg.inv(mat))
array([[ 1.0000000e+00, 0.0000000e+00, -8.8817842e-16],
[ 0.0000000e+00, 1.0000000e+00, 0.0000000e+00],
[ 8.8817842e-16, -8.8817842e-16, 1.0000000e+00]])
#QR分解
>>> q,r = np.linalg.qr(mat)
>>> q
array([[-0.47521167, 0.74149744, 0.47366171],
[-0.78350839, -0.11166493, -0.61126553],
[-0.40036042, -0.66159844, 0.63403394]])
>>> r
array([[-1.21093584, -2.84357017, -1.9198039 ],
[ 0. , -0.54284656, -0.66049398],
[ 0. , 0. , 0.13142747]])
2.生成随机数
numpy.random模块对Python的random模块进行了补充,增加了一些高校生成多种概率分布的样本值函数。
numpy.random 常用的函数有
比如生成标准正太分布:
>>> samples = np.random.normal(size = (4,4))
>>> samples
array([[ 0.11746882, 1.64644052, 0.04560203, -0.79944825],
[ 0.01219797, 0.66329519, 0.24477763, 0.34543476],
[-0.62787252, 1.61573669, -1.82986935, 2.54301618],
[ 2.14869474, -0.89128189, 0.72128917, 0.48910364]])
需要生成大量的样本值时,numpy.random的速度更快!!