python数据分析之NumPy与线性代数、随机数生成、随机漫步

1、线性代数

线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分。提供了一个用于矩阵乘法的dot函数(既是一个数组方法也是numpy命名空间中的一个函数):

x = np.array([[1,2,3],[4,5,6]])
y = np.array([[6.,23.],[-1,7],[8,9]])

x
Out[28]: 
array([[1, 2, 3],
       [4, 5, 6]])

y
Out[29]: 
array([[ 6., 23.],
       [-1.,  7.],
       [ 8.,  9.]])

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

np.dot(x,y)
Out[31]: 
array([[ 28.,  64.],
       [ 67., 181.]])
#一个二维数组跟一个大小合适的一维数组的矩阵点积运算之后将会得到一个一维数组:
np.dot(x,np.ones(3))                #np.ones(3)
Out[32]: array([ 6., 15.])          #Out[33]: array([1., 1., 1.])

np.dot(y,np.ones(2))
Out[37]: array([29.,  6., 17.])

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

from numpy.linalg import inv,qr

X = np.random.randn(5,5)

mat = X.T.dot(X)     #X与X转置的乘积

inv(mat)    #求逆
Out[41]: 
array([[ 2.20368991,  0.96734814,  3.54606527,  1.38473068, -2.97351661],
       [ 0.96734814,  1.02145768,  2.24307417,  0.8696279 , -1.76391267],
       [ 3.54606527,  2.24307417,  7.02501391,  2.65095659, -5.74459431],
       [ 1.38473068,  0.8696279 ,  2.65095659,  1.24764755, -2.20325776],
       [-2.97351661, -1.76391267, -5.74459431, -2.20325776,  5.01101457]])

mat.dot(inv(mat))   #mat与mat逆的矩阵乘积
Out[42]: 
array([[ 1.00000000e+00, -5.71494158e-16,  6.21064872e-16,
        -4.67468968e-17, -7.81130009e-17],
       [-3.98883269e-16,  1.00000000e+00, -3.50915755e-18,
         8.29266355e-16, -9.222693
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值