科学计算包Numpy
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的更多相关文章
- 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题
动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题 D3 ...
- Python下科学计算包numpy和SciPy的安装
转载自:http://blog.sina.com.cn/s/blog_62dfdc740101aoo6.html Python下大多数工具包的安装都很简单,只需要执行 “python setup.py ...
- Python下科学计算包numpy和SciPy的安装【原创】
Python下大多数工具包的安装都很简单,只需要执行 "python setup.py install"命令即可.然而,由于SciPy和numpy这两个科学计算包的依赖关系较多,安 ...
- python科学计算包numpy用法(一)
numpy是python中一个用来做科学计算的包,用起来十分方便,下面是我总结的numpy的用法: 1.如何创建矩阵 创建矩阵有很多种方法,主要包括以下几种: 通过array函数创建 >> ...
- 第六节,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 ...
- 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 ...
- Python科学计算包模块的安装(ubuntu)
Python的科学计算包设计到C语言代码的编译,采用pip的方式安装会出现错误. 一种简单的方式是采用的集成包,具体的步骤参考:https://www.continuum.io/downloads#_ ...
- 数据分析与科学计算可视化-----用于科学计算的numpy库与可视化工具matplotlib
一.numpy库与matplotlib库的基本介绍 1.安装 (1)通过pip安装: >> pip install matplotlib 安装完成 安装matplotlib的方式和nump ...
- Windows下安装python的scipy等科学计算包(转)
如果要使用python进行科学计算.数据分析等,一定要安装scipy.seaborn.numpy等等包. 但Windows下安装python的第三方库经常会出现问题.此前,已介绍过Windows下如何 ...
随机推荐
- Docker搭建MySQL主从复制
Docker搭建MySQL主从复制 主从服务器上分别安装Docker 1.1 Docker 要求 CentOS 系统的内核版本高于 3.10 [root@localhost ~]# uname -r ...
- AssociatedObject
在 Objective-C 中可以通过 Category 给一个现有的类添加属性,但是却不能添加实例变量,值得庆幸的是,我们可以通过 Associated Objects 来弥补这一不足. 在阅读本文 ...
- 怎么获取WebAPI项目中图片在服务端的路径
1.这是我的项目结构. 2.路径格式为:[http://服务器域名/文件夹/文件.扩展名] 测试:假如我要获取到[logo_icon.jpg]这张图.在浏览器的地址栏中输入上面那个格式的路径. 3.可 ...
- 对webpack和gulp的理解和区别
webpack是前端构建工具,称为模块打包机,webpack支持模块化:构建前端开发过程中常用的文件,如:js,css,html,img等:使用简单方便,自动化构建.webpack是通过loader( ...
- B 基因改造
时间限制 : - MS 空间限制 : - KB 问题描述 "人类智慧的冰峰,只有萌萌哒的我寂寞地守望."--TBTB正走在改造人类智慧基因的路上.TB发现人类智慧基因一点也不 ...
- usdt钱包对接,usdt 对接交易平台,usdtapi,以太坊对接,以太坊代币对接
usdt钱包对接,usdt 对接交易平台,usdtapi,以太坊对接,以太坊代币对接 自动充提币接口开发. 可对接:商城系统,游戏APP,交易平台,网站,各类APP -实现自动充提,查询,上链等功能接 ...
- 使用 python 查看谁没有交作业
话说实验报告每天都要查人数,何不用程序实现 使用 python 查看谁没有交作业 version 1.0 程序嘛,肯定是可以改进的.使用该程序的前提是实验报告文件名中包含学号信息.将以上程序放在实验报 ...
- JAVA中Calendar 类的应用
转自:https://www.imooc.com/code/2340 侵删! Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法 ...
- 八、路由详细介绍之动态路由OSPF(重点)
一.OSPF介绍 OSPF优点:无环路.收敛快.扩展性好.支持认证 二.工作原理: 图中RTA.RTB.RTC每个路由器都会生成一个LSA, 通过LSA泛洪进行互相发送相互学习,形成LSDB (链路状 ...
- python3(四)list tuple
# !/usr/bin/env python3 # -*- coding: utf-8 -*- # list是一种有序的集合,可以随时添加和删除其中的元素. classmates = ['Michae ...