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

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

目录:

  • NumPy在矩阵运算中的应用

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

NumPy在矩阵运算中的应用

  • 常用矩阵运算函数介绍

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

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

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

 m, c = np.linalg.lstsq(A, y)[0]         #拟合y = mA+c 一次曲线

 print(m, c)
import matplotlib.pyplot as plt
plt.plot(x, y, 'o', label='Original data', markersize=10)
plt.plot(x, m*x + c, 'r', label='Fitted line')
plt.legend()
plt.show()
#输出结果
'''
0.9999999999999999 -0.9499999999999997
''' 输出拟合曲线为:

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

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

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

     x = np.arange(10)
    print(x)
    print("************")
    np.random.shuffle(x) #这里直接打乱原始序列,不会返回任何值,再次输出原序列即可看到改变
    print(x) np.random.seed(666) #设置一个随机数种子,相同的随机数种子产生的随机数相同
    y_1 = np.random.randint(0, 10, size=10)
    y_2 = np.random.randint(0, 10, size=10)
    np.random.seed(666) #设置一个随机数种子,相同的随机数种子产生的随机数相同
    y_1_seed = np.random.randint(0, 10, size=10)
    print("************")
    print(y_1, y_2, y_1_seed)
    #输出结果
    '''
    [0 1 2 3 4 5 6 7 8 9]
    ************
    [8 3 9 7 6 5 2 4 0 1]
    ************
    [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]
    '''
     #permutation()给出序列随机排序的结果
    x = np.random.permutation([1, 2, 3]) #不是就地打乱,可以进行赋值
    print(np.random.permutation([1]))
    print(np.random.permutation([1, 2]))
    print(x)
    #输出结果
    '''
    [1]
    [2 1]
    [3 2 1]
    '''
  • 实例:随机漫步

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


NumPy基础操作(3)——代数运算和随机数的更多相关文章

  1. numpy 基础操作

    Numpy 基础操作¶ 以numpy的基本数据例子来学习numpy基本数据处理方法 主要内容有: 创建数组 数组维度转换 数据选区和切片 数组数据计算 随机数 数据合并 数据统计计算 In [1]: ...

  2. NumPy基础操作

    NumPy基础操作(1) (注:记得在文件开头导入import numpy as np) 目录: 数组的创建 强制类型转换与切片 布尔型索引 结语 数组的创建 相关函数 np.array(), np. ...

  3. NumPy基础操作(2)

    NumPy基础操作(2) (注:记得在文件开头导入import numpy as np) 目录: 写在前面 转置和轴对换 NumPy常用函数 写在前面 本篇博文主要讲解了普通转置array.T.轴对换 ...

  4. [笔记]NumPy基础操作

    学机器学习做点小笔记,都是Python的NumPy库的基本小操作,图书馆借的书看到的,怕自己还了书后忘了,就记下来. 一般习惯导入numpy时使用 import numpy as np ,不要直接im ...

  5. 学习Numpy基础操作

    # coding:utf-8 import numpy as np from numpy.linalg import * def day1(): ''' ndarray :return: ''' ls ...

  6. [笔记]SciPy、Matplotlib基础操作

    NumPy.SciPy.Matplotlib,Python下机器学习三大利器.上一篇讲了NumPy基础操作,这节讲讲SciPy和Matplotlib.目前接触到的东西不多,以后再遇到些比较常用的再更新 ...

  7. 《利用Python进行数据分析·第2版》第四章 Numpy基础:数组和矢量计算

    <利用Python进行数据分析·第2版>第四章 Numpy基础:数组和矢量计算 numpy高效处理大数组的数据原因: numpy是在一个连续的内存块中存储数据,独立于其他python内置对 ...

  8. 小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据

    在家为国家做贡献太无聊,不如跟我一起学点 Python 人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Panda ...

  9. 科学计算库Numpy基础&提升(理解+重要函数讲解)

    Intro 对于同样的数值计算任务,使用numpy比直接编写python代码实现 优点: 代码更简洁: numpy直接以数组.矩阵为粒度计算并且支持大量的数学函数,而python需要用for循环从底层 ...

随机推荐

  1. [原译]WPF绘制圆角多边形

    原文:[原译]WPF绘制圆角多边形 介绍 最近,我发现我需要个圆角多边形.而且是需要在运行时从用户界面来绘制.WPF有多边形.但是不支持圆角.我搜索了一下.也没找到可行的现成例子.于是就自己做吧.本文 ...

  2. StackExchange.Redis 封装类

    using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using ...

  3. WPF后台生成datatemplate(TreeViewItem例子)

    public void loadCheckListDataTemplate(TreeViewItem tvi) { DataTemplate cdt = new DataTemplate(); Fra ...

  4. delphi资源文件的使用

    delphi资源文件的使用 资源文件(*.res)通过编译指令 $R 关联, 譬如工程文件 Project1 中的 {$R *.res} 就是关联 Project1.res 资源文件, 我们直接写作 ...

  5. Win8 Metro(C#)数字图像处理--2.41彩色图像密度分割算法

    原文:Win8 Metro(C#)数字图像处理--2.41彩色图像密度分割算法  [函数名称]   彩色图像密度分割函数      DensitySegmentProcess(WriteableB ...

  6. Win8Metro(C#)数字图像处理--2.13Roberts边缘检测

    原文:Win8Metro(C#)数字图像处理--2.13Roberts边缘检测  [函数名称] 图像Roberts边缘检测函数RobertEdgeProcess(WriteableBitmap s ...

  7. SQL Server 事务复制分发到订阅同步慢

    原文:SQL Server 事务复制分发到订阅同步慢 最近发现有一个发布经常出现问题,每几天就出错不同步,提示要求初始化.重新调整同步后,复制还是很慢!每天白天未分发的命令就达五六百万条!要解决慢的问 ...

  8. 零元学Expression Blend 4 - Chapter 30 8个Expression Blend4的快捷

    原文:零元学Expression Blend 4 - Chapter 30 8个Expression Blend4的快捷 我针对工作区跟视窗的快捷键整理了八个Expression Blend4的快捷, ...

  9. sqlite查询问题,由字母大小写敏感引起

    目前做的项目之前是用mysql,这是个错误的选择,因为本身并不是服务器-客户端模式的项目,而是一个CS架构项目,mysql这种需要较繁复配置的数据库并不合适.需要的应该是sqlite这类,内嵌的数据库 ...

  10. 笨重的mfc还在基于系统控件,熟练的mfc工程师还比不过学习Qt一个月的学生开发效率高(比较精彩,韦易笑)

    作者:韦易笑链接:https://www.zhihu.com/question/29636221/answer/45102191来源:知乎著作权归作者所有,转载请联系作者获得授权. 更新:擦,本来只有 ...