利用Python进行数据分析笔记(线性代数)

  • 线性代数,比如矩阵乘法、分解、行列式等方阵数学,是所有数组类库的重要组成部分。和Matlab等其他语言相比,Numpy的线性代数中有所不同的是*是矩阵的逐元素乘积,而不是矩阵的点乘积。因此NumPy的数组方法和numpy命名空间中都有一个函数dot,用于矩阵的操作:
>>> x = np.array([[1.,2.,3.],[4.,5.,6.]])
>>> y = np.array([[6.,23.],[-1,7],[8,9]])
>>> x
array([[1., 2., 3.],
       [4., 5., 6.]])
>>> y
array([[ 6., 23.],
       [-1.,  7.],
       [ 8.,  9.]])
>>> x.dot(y)
array([[ 28.,  64.],
       [ 67., 181.]])
  • x.dot(y)等价于np.dot(x,y)
>>> np.dot(x,y)
array([[ 28.,  64.],
       [ 67., 181.]])
  • 一个二维数组和一个长度合适的一维数组之间的矩阵乘积,其结果是一个一维数组:
>>> np.dot(x,np.ones(3))
array([ 6., 15.])
  • 特殊符号@也作为中缀操作符,用于点乘矩阵操作:
>>> x @ np.ones(3)
array([ 6., 15.])
  • numpy.linalg拥有一个矩阵分解的标准函数集,以及其他常用函数,例如求逆和行列式求解。这些函数都是通过在MATLAB和R等其他语言使用的相同的行业标准线性代数库来实现的,例如BLAS、LAPACK或英特尔专有的MKL(数学核心库)(是否使用MKL取决于使用NumPy的版本):
>>> from numpy.linalg import inv,qr
>>> X = np.random.randn(5,5)
>>> mat = X.T.dot(X)
>>> inv(mat)
array([[ 0.18949471, -0.23045707, -0.10194047,  0.24860639, -0.07878032],
       [-0.23045707,  0.57360482,  0.08499988, -0.39548269,  0.04012748],
       [-0.10194047,  0.08499988,  0.82805002, -0.23124339,  0.15493678],
       [ 0.24860639, -0.39548269, -0.23124339,  0.72541432, -0.09648418],
       [-0.07878032,  0.04012748,  0.15493678, -0.09648418,  0.14085473]])
>>> mat.dot(inv(mat))
array([[ 1.00000000e+00, -1.07871053e-16, -1.09219802e-16,
         3.95670878e-16,  1.57486508e-16],
       [-9.52439100e-17,  1.00000000e+00,  7.45253384e-17,
         1.10968802e-16,  9.93202436e-18],
       [ 9.44428246e-19, -2.05395912e-17,  1.00000000e+00,
         2.87152531e-17, -2.51201472e-17],
       [ 2.46662044e-17, -1.44893157e-16, -1.46467367e-16,
         1.00000000e+00, -6.61372669e-17],
       [-3.72426218e-17, -3.45464245e-17,  2.42343156e-16,
         2.46040385e-16,  1.00000000e+00]])
>>> q,r = qr(mat)
>>> r
array([[-18.72327702,  -5.72138902,   0.99839179,   2.34455365,
        -10.89317503],
       [  0.        ,  -3.19464238,  -0.39202645,  -2.63291228,
         -0.3624643 ],
       [  0.        ,   0.        ,  -2.11533827,   0.17322111,
          6.81924047],
       [  0.        ,   0.        ,   0.        ,  -1.55441663,
         -3.94815465],
       [  0.        ,   0.        ,   0.        ,   0.        ,
          4.04983738]])
  • 表达式X.T.dot(X)计算的是X和它的转置矩阵X.T的点乘积。
  • 下表示最常用的线性代数函数列表。
    -
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值