Numpy

用于科学计算的python模块,提供了Python中没有的数组对象,支持N维数组运算、处理大型矩阵、成熟的广播函数库、矢量运算、线性代数、傅里叶变换以及随机数生成等功能,并可与C++、FORTRAN等语言无缝结合。

菜鸟教程:https://www.runoob.com/numpy/numpy-dtype.html

·导入numpy模块(打开cmd窗口)

  1. pip install numpy

·简单应用

  1. import numpy as np

1.生成数组

  1. >>> np.array([1, 2, 3, 4, 5]) # 把列表转换为数组
  2. array([1, 2, 3, 4, 5])
  3. >>> np.array((1, 2, 3, 4, 5)) # 把元组转换成数组
  4. array([1, 2, 3, 4, 5])
  5. >>> np.array(range(5)) # 把range对象转换成数组
  6. array([0, 1, 2, 3, 4])
  7. >>> np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组
  8. array([[1, 2, 3],
  9. [4, 5, 6]])
  10. >>> np.arange(8) # 类似于内置函数range()
  11. array([0, 1, 2, 3, 4, 5, 6, 7])
  12. >>> np.arange(1, 10, 2) #从1到10(包括1,不包括10),步长为2
  13. array([1, 3, 5, 7, 9])
  14. >>> np.linspace(0, 10, 11)
  15. # 等差数组,包含11个数,从0到10(包括0,也包括10,闭区间),平均分为11个数字array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
  16. >>> np.linspace(0, 10, 11, endpoint=False) # 不包含终点
  17. array([ 0. , 0.90909091, 1.81818182, 2.72727273, 3.63636364,
  18. 4.54545455, 5.45454545, 6.36363636, 7.27272727, 8.18181818,
  19. 9.09090909])
  20. >>> np.logspace(0, 100, 10) # 对数数组,从0到100,取10个数,返回10个数分别作为幂,计算基为10的结果数组
  21. array([ 1.00000000e+000, 1.29154967e+011, 1.66810054e+022,
  22. 2.15443469e+033, 2.78255940e+044, 3.59381366e+055,
  23. 4.64158883e+066, 5.99484250e+077, 7.74263683e+088,
  24. 1.00000000e+100])
  25. >>>np.logspace(0, 10, 5)
  26. array([1.00000000e+00, 3.16227766e+02, 1.00000000e+05, 3.16227766e+07,
  27. 1.00000000e+10])
  28. >>> np.logspace(1,6,5, base=2) # 对数数组,相当于2 ** np.linspace(1,6,5)
  29. array([ 2. , 4.75682846, 11.3137085 , 26.90868529, 64. ])
  30. >>>np.logspace(1,5,5,base=2)
  31. array([ 2., 4., 8., 16., 32.])
  32. >>>np.logspace(1,6,3,base=2)
  33. array([ 2. , 11.3137085, 64. ])
  34. >>> np.zeros(3) # 全0一维数组
  35. array([ 0., 0., 0.])
  36. >>> np.ones(3) # 全1一维数组
  37. array([ 1., 1., 1.])
  38. >>> np.zeros((3,3)) # 全0二维数组,3行3列
  39. array([[ 0., 0., 0.],
  40. [ 0., 0., 0.],
  41. [ 0., 0., 0.]])
  42. >>> np.zeros((3,1)) # 全0二维数组,3行1列
  43. array([[ 0.],
  44. [ 0.],
  45. [ 0.]])
  46. >>> np.zeros((1,3)) # 全0二维数组,1行3列
  47. array([[ 0., 0., 0.]])
  48. >>> np.ones((3,3)) # 全1二维数组
  49. array([[ 1., 1., 1.],
  50. [ 1., 1., 1.],
  51. [ 1., 1., 1.]])
  52. >>> np.ones((1,3)) # 全1二维数组
  53. array([[ 1., 1., 1.]])
  54. >>> np.identity(3) # 单位矩阵
  55. array([[ 1., 0., 0.],
  56. [ 0., 1., 0.],
  57. [ 0., 0., 1.]])
  58. >>> np.identity(2)
  59. array([[ 1., 0.],
  60. [ 0., 1.]])
  61. >>> np.empty((3,3)) # 空数组,只申请空间而不初始化,元素值是不确定的
  62. array([[ 0., 0., 0.],
  63. [ 0., 0., 0.],
  64. [ 0., 0., 0.]])
  65. >>> np.random.randint(0, 50, 5) # 随机数组,5个0到50之间的数字
  66. array([13, 47, 31, 26, 9])
  67. >>> np.random.randint(0, 50, (3,5)) # 3行5列
  68. array([[34, 2, 33, 14, 40],
  69. [ 9, 5, 10, 27, 11],
  70. [26, 17, 10, 46, 30]])
  71. >>> np.random.rand(10)
  72. array([ 0.98139326, 0.35675498, 0.30580776, 0.30379627, 0.19527425,
  73. 0.59159936, 0.31132305, 0.20219211, 0.20073821, 0.02435331])
  74. >>> np.random.standard_normal(5) # 从标准正态分布中随机采样
  75. array([ 2.82669067, 0.9773194 , -0.72595951, -0.11343254, 0.74813065])

 

2.数组与数值的算术运算

  1. >>> a=np.array((1,2,3,4,5))
  2. >>> a+2
  3. array([3, 4, 5, 6, 7])
  4. >>> a-2
  5. array([-1, 0, 1, 2, 3])
  6. >>> a*2
  7. array([ 2, 4, 6, 8, 10])
  8. >>> a/2
  9. array([0.5, 1. , 1.5, 2. , 2.5])
  10. >>> a//2
  11. array([0, 1, 1, 2, 2], dtype=int32)
  12. >>> a**2
  13. array([ 1, 4, 9, 16, 25], dtype=int32)

  

3.数组与数组的算术运算

  1. >>> a=np.array((1,2,3))
  2. >>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
  3. >>> a+b
  4. array([[ 2, 4, 6],
  5. [ 5, 7, 9],
  6. [ 8, 10, 12]])
  7. >>> a-b
  8. array([[ 0, 0, 0],
  9. [-3, -3, -3],
  10. [-6, -6, -6]])
  11. >>> a*b
  12. array([[ 1, 4, 9],
  13. [ 4, 10, 18],
  14. [ 7, 16, 27]])
  15. >>> a//b
  16. array([[1, 1, 1],
  17. [0, 0, 0],
  18. [0, 0, 0]], dtype=int32)

  

4.二维数组转置

  1. >>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
  2. >>> b
  3. array([[1, 2, 3],
  4. [4, 5, 6],
  5. [7, 8, 9]])
  6. >>> print(b.T)
  7. [[1 4 7]
  8. [2 5 8]
  9. [3 6 9]]

  

5.向量点积

  1. >>> a=np.array((5,6,7))
  2. >>> b=np.array((6,6,6))
  3. >>> np.dot(a,b)
  4. 108

  

6.数组元素访问

  1. >>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
  2. >>> b[0,0]
  3. 1
  4. >>> b[0][2]
  5. 3

  

多元素同时访问

  1. >>> x = np.arange(0,100,10,dtype=np.floating)
  2. >>> x
  3. array([ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90.])
  4. >>> x[[1, 3, 5]] # 同时访问多个位置上的元素
  5. array([ 10., 30., 50.])

  

7.三角函数运算

  1. >>> b=np.array(([1,2,3],[4,5,6],[7,8,9]))
  2. >>> np.sin(b)
  3. array([[ 0.84147098, 0.90929743, 0.14112001],
  4. [-0.7568025 , -0.95892427, -0.2794155 ],
  5. [ 0.6569866 , 0.98935825, 0.41211849]])

  

8.四舍五入

  1. >>> np.round(np.sin(b))
  2. array([[ 1., 1., 0.],
  3. [-1., -1., -0.],
  4. [ 1., 1., 0.]])

  

9.对矩阵不同维度上的元素进行求和

  1. >>> x=np.arange(0,10).reshape(2,5)
  2. >>> x
  3. array([[0, 1, 2, 3, 4],
  4. [5, 6, 7, 8, 9]])
  5. >>> np.sum(x)
  6. 45
  7. >>> np.sum(x,axis=0) #每列求和
  8. array([ 5, 7, 9, 11, 13])
  9. >>> np.sum(x,axis=1) #每行求和
  10. array([10, 35])

  

10.计算矩阵不同维度上元素的均值

  1. >>> np.average(x,axis=0)
  2. array([2.5, 3.5, 4.5, 5.5, 6.5])
  3. >>> np.average(x,axis=1)
  4. array([2., 7.])

  

11.计算数据的标准差与方差

  1. >>> x=np.random.randint(0,10,size=(3,3))
  2. >>> x
  3. array([[5, 3, 5],
  4. [3, 6, 2],
  5. [6, 0, 9]])
  6. >>> np.std(x) #标准差
  7. 2.494438257849294
  8. >>> np.std(x,axis=1) #列行标准差
    array([0.94280904, 1.69967317, 3.74165739])
  9. >>> np.var(x) #方差
  10. 6.222222222222222

  

12.对矩阵不同维度上的元素求最大值

  1. >>> x=np.random.randint(0,10,size=(3,3))
  2. >>> x
  3. array([[2, 6, 9],
  4. [1, 8, 3],
  5. [0, 9, 8]])
  6. >>> np.max(x)
  7. 9
  8. >>> np.max(x,axis=1) #每列最大值
  9. array([9, 8, 9])

13.对矩阵不同维度上的元素进行排序

  1. >>> np.sort(x)
  2. array([[2, 6, 9],
  3. [1, 3, 8],
  4. [0, 8, 9]])
  5. >>> np.sort(x,axis=0)
  6. array([[0, 6, 3],
  7. [1, 8, 8],
  8. [2, 9, 9]])

14.生成特殊数组

  1. >>> np.empty((3,3)) #只申请空间,不初始化,速度很快
  2. array([[0.00000000e+000, 0.00000000e+000, 0.00000000e+000],
  3. [0.00000000e+000, 0.00000000e+000, 4.82208070e-321],
  4. [1.86918698e-306, 1.78021662e-306, 2.46155235e-312]])

15.改变数组大小

  1. >>> a=np.arange(1,11,1)
  2. >>> a
  3. array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
  4. >>> a.shape=2,5
  5. >>> a
  6. array([[ 1, 2, 3, 4, 5],
  7. [ 6, 7, 8, 9, 10]])
  8. >>> a.shape=5,-1 #-1表示自动计算
  9. >>> a
  10. array([[ 1, 2],
  11. [ 3, 4],
  12. [ 5, 6],
  13. [ 7, 8],
  14. [ 9, 10]])
  15. >>> a.reshape(2,5)
  16. array([[ 1, 2, 3, 4, 5],
  17. [ 6, 7, 8, 9, 10]])

16.切片操作

  1. >>> a=np.arange(10)
  2. >>> a
  3. array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  4. >>> a[::-1]
  5. array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
  6. >>> a[::2]
  7. array([0, 2, 4, 6, 8])
  8.  
  9. >>> c=np.array([[j*10+ i for i in range(6)] for j in range (6)])
  10. >>> c
  11. array([[ 0, 1, 2, 3, 4, 5],
  12. [10, 11, 12, 13, 14, 15],
  13. [20, 21, 22, 23, 24, 25],
  14. [30, 31, 32, 33, 34, 35],
  15. [40, 41, 42, 43, 44, 45],
  16. [50, 51, 52, 53, 54, 55]])
  17. >>> c[0,3:5] #取第0行第三个和第四个元素
  18. array([3, 4])

17.布尔运算

  1. >>> x=np.random.rand(10)
  2. >>> x
  3. array([0.10905435, 0.57768227, 0.18788365, 0.23399672, 0.93576621,
  4. 0.62251011, 0.54649539, 0.37180411, 0.72779445, 0.05535632])
  5. >>> x>0.5
  6. array([False, True, False, False, True, True, True, False, True,
  7. False])
  8. >>> x[x>0.5] #取出所有大于0.5的元素
  9. array([0.57768227, 0.93576621, 0.62251011, 0.54649539, 0.72779445])
  10. >>> np.array([1,2,3]) < np.array([3,2,1])
  11. array([ True, False, False])
  12. >>> np.array([1,2,3]) == np.array([3,2,1])
  13. array([False, True, False])

18.取整运算

  1. >>> x=np.random.rand(10)*50
  2. >>> x
  3. array([19.13213223, 38.14702133, 41.30754565, 19.51765474, 19.73843457,
  4. 25.66530995, 34.74361578, 12.44682723, 6.03817843, 34.18593124])
  5. >>> np.array([t-int(t) for t in x]) #获取小数部分
  6. array([0.13213223, 0.14702133, 0.30754565, 0.51765474, 0.73843457,
  7. 0.66530995, 0.74361578, 0.44682723, 0.03817843, 0.18593124])

19.广播

  1. >>> a=np.arange(0,60,10).reshape(-1,1)
  2. >>> b=np.arange(0,6)
  3. >>> a
  4. array([[ 0],
  5. [10],
  6. [20],
  7. [30],
  8. [40],
  9. [50]])
  10. >>> b
  11. array([0, 1, 2, 3, 4, 5])
  12. >>> a+b
  13. array([[ 0, 1, 2, 3, 4, 5],
  14. [10, 11, 12, 13, 14, 15],
  15. [20, 21, 22, 23, 24, 25],
  16. [30, 31, 32, 33, 34, 35],
  17. [40, 41, 42, 43, 44, 45],
  18. [50, 51, 52, 53, 54, 55]])

20.分段函数

  1. >>> x=np.random.randint(0,10,size=(1,10))
  2. >>> x
  3. array([[4, 4, 8, 9, 0, 0, 4, 0, 3, 5]])
  4. >>> np.where(x<5,0,1) #选出小于5,0,1的数
  5. array([[0, 0, 1, 1, 0, 0, 0, 0, 0, 1]])
  6. >>>np.piecewise(x,[x<7,x>4],[lambda x:x*2,lambda x:x*3]) #小于7的数乘2,大于4的数乘3
  7. array([[ 8, 8, 24, 27, 0, 0, 8, 0, 6, 15]])

21.计算唯一值以及出现次数

  1. >>> x=np.random.randint(0,10,10)
  2. >>> x
  3. array([1, 1, 0, 2, 7, 1, 6, 6, 9, 7])
  4. >>> np.unique(x) #计算唯一值
  5. array([0, 1, 2, 6, 7, 9])
  6. >>> np.bincount(x) #计算出现的次数,但是因为访问是无序的,所以最后并不是顺序计数
  7. array([1, 3, 1, 0, 0, 0, 2, 2, 0, 1], dtype=int64)

22.计算加权平均值

  1. >>> y=np.array([round(i,1) for i in list (np.random.random(10))])
  2. >>> y
  3. array([0.2, 0. , 0.6, 0.3, 0.7, 0. , 0.7, 0.4, 0.8, 0.7]) #随机生成10个0-1之间的带一位小数的数
  4. >>> np.sum(x*y)/np.sum(np.bincount(x)) #平均值
  5. 2.44

23.矩阵运算

  

  1. >>> a_list=[3,5,7]
  2. >>> a_mat=np.matrix(a_list) #设置为矩阵库
  3. >>> a_mat
  4. matrix([[3, 5, 7]])
  5. >>> np.shape(a_mat) #矩阵为一行三列
  6. (1, 3)
  7. >>> b_mat=np.matrix((1,2,3))
  8. >>> b_mat
  9. matrix([[1, 2, 3]])
  10. >>> a_mat * b_mat.T #矩阵乘法
  11. matrix([[34]])
  12. >>> a_mat.argsort() #返回的是数组值从小到大的索引值
  13. matrix([[0, 1, 2]], dtype=int64)
  14. >>> a_mat.sum()
  15. 15
  16. >>> a_mat
  17. matrix([[3, 5, 7]])
  18. >>> a_mat.mean()
  19. 5.0
  20. >>> a_mat.max()
  21. 7

科学计算包Numpy的更多相关文章

  1. 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题

    动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题 D3 ...

  2. Python下科学计算包numpy和SciPy的安装

    转载自:http://blog.sina.com.cn/s/blog_62dfdc740101aoo6.html Python下大多数工具包的安装都很简单,只需要执行 “python setup.py ...

  3. Python下科学计算包numpy和SciPy的安装【原创】

    Python下大多数工具包的安装都很简单,只需要执行 "python setup.py install"命令即可.然而,由于SciPy和numpy这两个科学计算包的依赖关系较多,安 ...

  4. python科学计算包numpy用法(一)

    numpy是python中一个用来做科学计算的包,用起来十分方便,下面是我总结的numpy的用法: 1.如何创建矩阵 创建矩阵有很多种方法,主要包括以下几种: 通过array函数创建 >> ...

  5. 第六节,Python的科学计算包——Numpy

    1.基本类型(array) import numpy as np a=[1,2,3,4] b=np.array(a) #array([1,2,3.4]) type(b) #<type 'nump ...

  6. Linux下Python科学计算包numpy和SciPy的安装

      系统环境: OS:RedHat5 Python版本:Python2.7.3 gcc版本:4.1.2 各个安装包版本: scipy-0.11.0 numpy-1.6.2 nose-1.2.1 lap ...

  7. Python科学计算包模块的安装(ubuntu)

    Python的科学计算包设计到C语言代码的编译,采用pip的方式安装会出现错误. 一种简单的方式是采用的集成包,具体的步骤参考:https://www.continuum.io/downloads#_ ...

  8. 数据分析与科学计算可视化-----用于科学计算的numpy库与可视化工具matplotlib

    一.numpy库与matplotlib库的基本介绍 1.安装 (1)通过pip安装: >> pip install matplotlib 安装完成 安装matplotlib的方式和nump ...

  9. Windows下安装python的scipy等科学计算包(转)

    如果要使用python进行科学计算.数据分析等,一定要安装scipy.seaborn.numpy等等包. 但Windows下安装python的第三方库经常会出现问题.此前,已介绍过Windows下如何 ...

随机推荐

  1. Docker搭建MySQL主从复制

    Docker搭建MySQL主从复制 主从服务器上分别安装Docker 1.1 Docker 要求 CentOS 系统的内核版本高于 3.10 [root@localhost ~]# uname -r ...

  2. AssociatedObject

    在 Objective-C 中可以通过 Category 给一个现有的类添加属性,但是却不能添加实例变量,值得庆幸的是,我们可以通过 Associated Objects 来弥补这一不足. 在阅读本文 ...

  3. 怎么获取WebAPI项目中图片在服务端的路径

    1.这是我的项目结构. 2.路径格式为:[http://服务器域名/文件夹/文件.扩展名] 测试:假如我要获取到[logo_icon.jpg]这张图.在浏览器的地址栏中输入上面那个格式的路径. 3.可 ...

  4. 对webpack和gulp的理解和区别

    webpack是前端构建工具,称为模块打包机,webpack支持模块化:构建前端开发过程中常用的文件,如:js,css,html,img等:使用简单方便,自动化构建.webpack是通过loader( ...

  5. B 基因改造

    时间限制 : - MS   空间限制 : - KB  问题描述 "人类智慧的冰峰,只有萌萌哒的我寂寞地守望."--TBTB正走在改造人类智慧基因的路上.TB发现人类智慧基因一点也不 ...

  6. usdt钱包对接,usdt 对接交易平台,usdtapi,以太坊对接,以太坊代币对接

    usdt钱包对接,usdt 对接交易平台,usdtapi,以太坊对接,以太坊代币对接 自动充提币接口开发. 可对接:商城系统,游戏APP,交易平台,网站,各类APP -实现自动充提,查询,上链等功能接 ...

  7. 使用 python 查看谁没有交作业

    话说实验报告每天都要查人数,何不用程序实现 使用 python 查看谁没有交作业 version 1.0 程序嘛,肯定是可以改进的.使用该程序的前提是实验报告文件名中包含学号信息.将以上程序放在实验报 ...

  8. JAVA中Calendar 类的应用

    转自:https://www.imooc.com/code/2340 侵删! Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法 ...

  9. 八、路由详细介绍之动态路由OSPF(重点)

    一.OSPF介绍 OSPF优点:无环路.收敛快.扩展性好.支持认证 二.工作原理: 图中RTA.RTB.RTC每个路由器都会生成一个LSA, 通过LSA泛洪进行互相发送相互学习,形成LSDB (链路状 ...

  10. python3(四)list tuple

    # !/usr/bin/env python3 # -*- coding: utf-8 -*- # list是一种有序的集合,可以随时添加和删除其中的元素. classmates = ['Michae ...