初识数据分析之NumPy 笔记五 线性代数

来源:《利用Python进行数据分析·第2版》

线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分。不像某些语言(如MATLAB),通过*对两个二维数组相乘得到的是一个元素级的积,而不是一个矩阵点积。因此,NumPy提供了一个用于矩阵乘法的dot函数(既是一个数组方法也是numpy命名空间中的一个函数):

矩阵乘法:

In [99]: x = np.array([[1., 2., 3.], [4., 5., 6.]])

In [100]: y = np.array([[6., 23.], [-1, 7], [8, 9]])

In [101]: x.dot(y)
Out[101]:
array([[ 28.,  64.],
       [ 67., 181.]])

x.dot(y)等价于np.dot(x, y):

In [102]: np.dot(x, y)
Out[102]:
array([[ 28.,  64.],
       [ 67., 181.]])

一个二维数组跟一个大小合适的一维数组的矩阵点积运算之后将会得到一个一维数组:

In [104]: np.dot(x, np.ones(3))
Out[104]: array([ 6., 15.])

@符(类似Python 3.5)也可以用作中缀运算符,进行矩阵乘法:

In [105]:  x @ np.ones(3)
Out[105]: array([ 6., 15.])

numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西。它们跟MATLAB和R等语言所使用的是相同的行业标准线性代数库,如BLAS、LAPACK、Intel MKL(Math Kernel Library,可能有,取决于你的NumPy版本)等:

In [106]: from numpy.linalg import inv, qr

In [107]: X = np.random.randn(5, 5)

In [108]: mat = X.T.dot(X)

In [109]: inv(mat)
Out[109]:
array([[ 0.88978025,  0.81691695,  0.87054785, -1.57252482,  0.76028636],
       [ 0.81691695,  2.23973101,  1.70975477, -3.09789712,  1.39597525],
       [ 0.87054785,  1.70975477,  2.00138866, -3.06778957,  1.56098419],
       [-1.57252482, -3.09789712, -3.06778957,  5.62635086, -2.64886301],
       [ 0.76028636,  1.39597525,  1.56098419, -2.64886301,  1.36709939]])

In [110]: mat.dot(inv(mat))
Out[110]:
array([[ 1.00000000e+00, -1.45642347e-16, -5.56582997e-17,
        -2.25617742e-16, -6.72721613e-17],
       [-1.07406872e-17,  1.00000000e+00, -2.02074324e-16,
        -1.91776881e-16,  2.72375007e-16],
       [-1.43092577e-16, -7.84751331e-16,  1.00000000e+00,
         1.62552898e-15,  5.40812703e-17],
       [ 4.99464388e-16, -4.83576538e-16, -2.12564786e-16,
         1.00000000e+00, -2.73182321e-16],
       [-2.11698177e-16, -9.40609002e-18,  2.47089290e-15,
         8.91522835e-16,  1.00000000e+00]])

In [111]: q, r = qr(mat)

In [112]: r
Out[112]:
array([[ -2.35220376,  -0.5158818 ,  -0.52214811,  -0.96401187,
          0.65170124],
       [  0.        ,  -3.35155443,   4.7919663 ,  -5.43125245,
        -12.99342172],
       [  0.        ,   0.        ,  -5.41358271,   0.57743108,
          7.62592331],
       [  0.        ,   0.        ,   0.        ,  -2.87057366,
         -5.9765822 ],
       [  0.        ,   0.        ,   0.        ,   0.        ,
          0.26871538]])

表达式X.T.dot(X)计算X和它的转置X.T的点积。

表4-7中列出了一些最常用的线性代数函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值