小白笔记day04:numpy基础之线性代数以及随机数

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函数有:
小白笔记day04:numpy基础之线性代数以及随机数


>>> 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 常用的函数有
小白笔记day04:numpy基础之线性代数以及随机数
小白笔记day04:numpy基础之线性代数以及随机数
比如生成标准正太分布:

>>> 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的速度更快!!

上一篇:day04


下一篇:day04总结