NumPy基础操作(3)——代数运算和随机数

2019-07-24 09:18:18来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折


NumPy基础操作(3)——代数运算和随机数

(注:记得在文件开头导入import numpy as np) 

目录:

  • NumPy在矩阵运算中的应用
    • 常用矩阵运算函数介绍
    • 编程实现
  • 利用NumPy生成随机数以及随机漫步
    • 常用随机数生成函数介绍
    • 编程实现
    • 随机漫步编程实现  

 


NumPy在矩阵运算中的应用

  • 常用矩阵运算函数介绍

常用的numpy函数
diag 将一维数组转换为方阵,一维数组元素为方阵对角线元素
dot 矩阵点乘运算
trace 计算对角线元素的和
det 计算矩阵的行列式
eig 计算方阵的特征值和对应的特征向量
inv 计算方阵的逆
solve 求解线性方程组Ax=b,其中A为方阵
lstsq 计算Ax=b的最小二乘解

 

  • 编程实现

     1 x = np.ones(3)
     2 xmat = np.diag(x)
     3 print(xmat)
     4 
     5 #输出结果
     6 '''
     7 [[1. 0. 0.]
     8  [0. 1. 0.]
     9  [0. 0. 1.]]
    10 '''
    1 x = np.ones(3)
    2 xmat = np.diag(x)
    3 N = np.trace(xmat)
    4 print(N)
    5 
    6 #输出结果
    7 '''
    8 3.0
    9 '''
     1 x = np.ones(3)
     2 xmat = np.diag(x)
     3 [s, p] = np.linalg.eig(xmat)   #返回xmat矩阵的特征值和特征向量
     4 #注意这里不能直接用np.eig(),应该加上np.linalg.eig()
     5 print(s)
     6 print("************")
     7 print(p)
     8 
     9 #输出结果
    10 '''
    11 [1. 1. 1.]
    12 ************
    13 [[1. 0. 0.]
    14  [0. 1. 0.]
    15  [0. 0. 1.]]
    16 '''
     1 xarr = np.array([[1, 2], [3, 4]])
     2 yarr = np.array([[5, 6], [7, 8]])
     3 print(xarr)
     4 print(yarr)
     5 print("************")
     6 x_mul_y = np.dot(xarr, yarr)        #.dot()是矩阵的乘法
     7 x_dot_y = xarr*yarr                 #*号乘法是矩阵元素对应相乘
     8 print(x_dot_y)
     9 print(x_mul_y)
    10 
    11 #输出结果
    12 '''
    13 [[1 2]
    14  [3 4]]
    15 [[5 6]
    16  [7 8]]
    17 ************
    18 [[ 5 12]
    19  [21 32]]
    20 [[19 22]
    21  [43 50]]
    22 '''
 1 xarr = np.array([[1, 2], [3, 4]])
 2 yarr = np.array([[5, 6], [7, 8]])
 3 
 4 print(xarr)
 5 print(yarr)
 6 print("************")
 7 x = np.linalg.solve(xarr, yarr)     #求解xarr.dot(x) = yarr
 8 print(x)
 9 #输出结果
10 '''
11 [[1 2]
12  [3 4]]
13 [[5 6]
14  [7 8]]
15 ************
16 [[-3. -4.]
17  [ 4.  5.]]
18 '''

 

 1 x = np.array([0, 1, 2, 3])
 2 y = np.array([-1, 0.2, 0.9, 2.1])
 3 A = np.vstack([x, np.ones(len(x))]).T
  A=

[[0. 1.]
[1. 1.]
[2. 1.]
[3. 1.]]

 4 m, c = np.linalg.lstsq(A, y)[0]         #拟合y = mA+c 一次曲线
 5 
 6 
 7 print(m, c)
 8 import matplotlib.pyplot as plt
 9 plt.plot(x, y, 'o', label='Original data', markersize=10)
10 plt.plot(x, m*x + c, 'r', label='Fitted line')
11 plt.legend()
12 plt.show()
13 #输出结果
14 '''
15 0.9999999999999999 -0.9499999999999997
16 '''

输出拟合曲线为:

 


 

利用NumPy生成随机数以及随机漫步

  • 常用随机数生成函数介绍

    部分numpy.random函数
    seed 确定随机数生成器的种子
    permutation 返回一个序列的随机排列或返回一个随机排列的范围
    shuffle 对一个序列随机排列
    rand 产生均匀分布的样本值
    randint 从给定的上下限范围内随机选取整数
    randn 产生正态分布(平均值为0,标准差为1)的样本值
    binomial 产生二项分布的样本值
    normal 产生正太(高斯)分布的样本值
    uniform 产生在[0,1)中均匀分布的样本值

 

  • 编程实现

     1 x = np.arange(10)
     2 print(x)
     3 print("************")
     4 np.random.shuffle(x)        #这里直接打乱原始序列,不会返回任何值,再次输出原序列即可看到改变
     5 print(x)
     6 
     7 np.random.seed(666)         #设置一个随机数种子,相同的随机数种子产生的随机数相同
     8 y_1 = np.random.randint(0, 10, size=10)
     9 y_2 = np.random.randint(0, 10, size=10)
    10 np.random.seed(666)         #设置一个随机数种子,相同的随机数种子产生的随机数相同
    11 y_1_seed = np.random.randint(0, 10, size=10)
    12 print("************")
    13 print(y_1, y_2, y_1_seed)
    14 #输出结果
    15 '''
    16 [0 1 2 3 4 5 6 7 8 9]
    17 ************
    18 [8 3 9 7 6 5 2 4 0 1]
    19 ************
    20 [2 6 9 4 3 1 0 8 7 5] [2 5 5 4 8 4 4 0 0 4] [2 6 9 4 3 1 0 8 7 5]
    21 '''
     1 #permutation()给出序列随机排序的结果
     2 x = np.random.permutation([1, 2, 3])    #不是就地打乱,可以进行赋值
     3 print(np.random.permutation([1]))
     4 print(np.random.permutation([1, 2]))
     5 print(x)
     6 #输出结果
     7 '''
     8 [1]
     9 [2 1]
    10 [3 2 1]
    11 '''

     

     

  • 实例:随机漫步

     1 import matplotlib.pyplot as plt
     2 
     3 nsteps = 1000
     4 draws = np.random.randint(0, 2, size=nsteps)
     5 steps = np.where(draws > 0, 1, -1)
     6 walk = steps.cumsum()
     7 print(walk.min(), walk.max())
     8 print((np.abs(walk) >= 10).argmax())        #argmax()返回数组中第一个最大值的索引号
     9 #(np.abs(walk) >= 10)已经变成了布尔型数组
    10 
    11 #绘制前100次的随机漫步结果
    12 plt.plot([x for x in range(100)], walk[:100])
    13 plt.title("Random walk with +1/-1 steps")
    14 plt.show()
    15 #输出结果
    16 '''
    17 -10 31
    18 51
    19 '''

     

     


 


原文链接:https://www.cnblogs.com/morvan/p/11165642.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:mysql-python 安装错误: Cannot open include file: 'config

下一篇:python 创建虚拟环境