Numpy

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

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

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

pip install numpy

·简单应用

import numpy as np

1.生成数组

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

 

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

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

  

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

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

  

4.二维数组转置

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

  

5.向量点积

>>> a=np.array((5,6,7))
>>> b=np.array((6,6,6))
>>> np.dot(a,b)
108

  

6.数组元素访问

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

  

多元素同时访问

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

  

7.三角函数运算

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

  

8.四舍五入

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

  

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

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

  

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

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

  

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

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

  

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

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

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

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

14.生成特殊数组

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

15.改变数组大小

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

16.切片操作

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

17.布尔运算

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

18.取整运算

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

19.广播

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

20.分段函数

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

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

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

22.计算加权平均值

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

23.矩阵运算

  

>>> a_list=[3,5,7]
>>> a_mat=np.matrix(a_list) #设置为矩阵库
>>> a_mat
matrix([[3, 5, 7]])
>>> np.shape(a_mat) #矩阵为一行三列
(1, 3)
>>> b_mat=np.matrix((1,2,3))
>>> b_mat
matrix([[1, 2, 3]])
>>> a_mat * b_mat.T #矩阵乘法
matrix([[34]])
>>> a_mat.argsort() #返回的是数组值从小到大的索引值
matrix([[0, 1, 2]], dtype=int64)
>>> a_mat.sum()
15
>>> a_mat
matrix([[3, 5, 7]])
>>> a_mat.mean()
5.0
>>> a_mat.max()
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. javascript创建函数的方法

    函数对任何语言来说都是一个核心的概念.函数,是一种封装(将一些语句,封装到函数里面). 通过函数可以封装任意多条语句,而且可以在任何地方.任何时候调用执行. ECMAScript中的函数使用funct ...

  2. 商品spu 和 sku的关系

    总结一下在目前的电商系统中的商品涉及的属性spu,sku.搞清楚两者之间的关系对表的设计非常重要 spu Standard Product Unit (标准产品单位) ,一组具有共同属性的商品集 SK ...

  3. Python——五分钟理解函数式编程与闭包

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第9篇文章,我们来聊聊Python的函数式编程与闭包. 函数式编程 函数式编程这个概念我们可能或多或少都听说过,刚听 ...

  4. scikit_learn分类器详解

    1       分类 分类是将事物按特性进行分类,例如将手写数字图片分类为对应的数字. 1.1  MINIST数字图片集分类 MINST就是一个70000张规格较小的手写数字图片,如何将他们分类为对应 ...

  5. Xmind pro Win10系统下安装问题解决与破解

    Xmind pro Win10系统下安装问题解决与破解 1.下载安装版本 解压包含文件: xmind-8-update7-windows--安装包 和XMindCrack.jar--激活破解工具 2. ...

  6. 1006 Sign In and Sign Out (25 分)

    At the beginning of every day, the first person who signs in the computer room will unlock the door, ...

  7. php--理解PHP的依赖注入和laravel的服务容器

    写在前面 为了了解laravel的服务容器在网上搜了许多文章,其中大多数都有其侧重点,没有很系统的一套东西以供参考,看完之后仍觉似乎少了一根把他们串起来的绳子,近期有幸拜读了陈昊的<Larave ...

  8. 以太坊代币,USDT归集流程图

    1.用户充值 600 代币 (网站小助手会及时监听到用户的充值信息,并回调给用户填写的URL地址) 2.会员转账600代币,属于大额转账,开始触发系统的自动汇集程序 注:这里系统检测到会员的地址并没有 ...

  9. (js描述的)数据结构[集合结构](6)

    (js描述的)数据结构[集合结构](6) 一.集合结构特点 1.集合中的元素不能重复. 2.集合是无序的. 二.集合的代码实现 function Set() { this.items = {} //1 ...

  10. Java第十四天,集合、迭代器的使用

    集合 集合框架 一.Collection 1.定义方法: Collection<E> obj = new Collection子类<>(); 因为Collection是一个抽象 ...