Python 学习 第十一篇:numpy
NumPy是Python中用于科学计算的基础软件包,提供了多维数据组对象,用于对数据进行快速的计算,NumPy包中最核心的类型是ndarray,封装了python原生的相同数据类型的 n 维数组,定义了一个执行矢量算术运算的n维数组,无需编写循环结构,就能对整个数组进行批量运算。通常情况下,导入NumPy,设置别名为np。
import numpy as np
Python原生数组是Array类型,ndarray和原生数组(Array)之间有几个非常明显的特征:
- ndarray对象在创建时有固定的大小,而原生数组对象可以动态增长,更改ndarray的大小将创建一个新数组并删除原始数组。
- ndarray对象中的元素类型是相同的,在内存中的大小相同。
- ndarry有助于对大量数据进行高级数学运算和其他类型的运算。
一,创建ndarray
ndarray是N-Dimension-Array的简称,该对象是一个快速而灵活的大数据集容器,该容器中存储的元素的数据类型都是相同的。
创建数组通常有:
- 从其他Python结构(例如,列表,元组)转换
- numpy原生数组的创建(例如,arange、ones、zeros等)
1,把Python 中array_like对象转换为Numpy数组
在Python中排列成array-like结构的数值数据可以通过使用array()函数转换为数组,最明显的例子是列表和元组。
a1 = np.array([1,2,3,4,5]) #1row
a2 = np.array([[1,2,3,4,5]
,[6,7,8,9,10]])# 2row * 5col
通过array()函数,使用列表创建的是一维数组,使用嵌套的列表创建的是多维数组。
2,创建Numpy原生数组
通过arange()函数创建一维数组,数组的元素是一个序列,默认值start=0,不包括stop,step=1。
numpy.arange([start, ]stop, [step, ]dtype=None)
numpy.arange()的用法示例:
a = np.arange(10) #default start=0, end=10(exclude 10),step=1
# [0 1 2 3 4 5 6 7 8 9]
a1 = np.arange(5,10) # start=5, end=10(exclude=10),step=1
# [5 6 7 8 9]
a2 = np.arange(5,20,2) # start=5, end=20(exclude 20),step=2
#[ 5 7 9 11 13 15 17 19]
可以使用reshape()函数重塑ndarray数组的shape,把12个元素的一维数组转换为3行4列的二维数组:
>>> np.arange(12).reshape(3,4)
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
3,数组可以转换为列表
ndarray对象的tolist()函数可以把一个数组对象转化为list列表:
>>> np.arange(12).reshape(3,4).tolist()
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
二,ndarray的属性
数组对象的属性主要有:
- dtype:描述数组元素的类型
- shape:以tuple表示的数组形状
- ndim:数组的维度
- size:数组中元素的个数
1,dtype对象
dtype是一个特殊的对象,它表示数组元素的类型。NumPy定义的跟平台无关的数据类型:
- 整数有符号系列:np.int8,np.int16,np.int32,np.int64
- 整数无符号系列:np.uint8、np.uint16、np.uint32、np.uint64
- 浮点数:np.float32、np.float64
- 布尔值:np.bool
2,shape对象
以元组形式表示一个数组的维度,前三个维度有名称:第一个维度是行,第二个维度是列,第三个维度是高
3,ndim对象
数组各个维度的元素数量
4,NumPy的常量
- np.Inf 表示无穷大
- np.nan 表示非数字
- np.pi
三,NumPy的时间和时间增量
NumPy支持的日期时间类型是:np.datetime64,日期单位是年('Y'),月('M'),周('W')和天('D'), 而时间单位是小时('h'),分钟('m') ),秒('s'), 毫秒('ms')和一些额外的SI前缀基于秒的单位。 对于“非时间”值,datetime64数据类型还接受字符串“NAT”(不是时间), 以小写/大写字母的任意组合。
np.datetime64('2005-02-25')
从字符串创建日期时间数组时,仍然可以通过使用具有通用单位的日期时间类型从输入中自动选择单位。
>>> np.array(['2007-07-13', '2006-01-13', '2010-08-13'], dtype='datetime64')
array(['2007-07-13', '2006-01-13', '2010-08-13'], dtype='datetime64[D]')
np.arange()函数可以根据时间单位生成时间范围:
>>> np.arange('2005-02', '2005-03', dtype='datetime64[D]')
NumPy允许两个Datetime值相减,这个操作产生一个带有时间单位的数字。timedelta64的参数是一个数字(用于表示单位数),以及日期/时间单位,如 (D)ay, (M)onth, (Y)ear, (h)ours, (m)inutes, 或者 (s)econds。timedelta64数据类型也接受字符串“NAT”代替“非时间”值的数字。
>>> numpy.timedelta64(1, 'D')
Datetimes 和 Timedeltas 一起工作,为简单的日期时间计算提供方法。
>>> np.datetime64('2009-01-01') - np.datetime64('2008-01-01')
numpy.timedelta64(366,'D')
>>> np.datetime64('') + np.timedelta64(20, 'D')
numpy.datetime64('2009-01-21')
四,形状操纵
一个数组的形状是由每个轴的元素数量决定的,可以通过reshape()和resize()函数来操纵数组的形状。
1,reshape函数
reshape()函数返回一个给定shape的数组的副本,不会修改原始数组:
numpy.reshape(a, newshape, order='C')
参数 newshape 表示数组的形状,对于二维数组,newshape是 (row, col) ,第一个维度是行数,第二个维度是列数。
例如,下面的代码把一个一维数组转换为4行2列的二位数组:
a=np.arange(8)
np.reshape(a,(4,2))
2,resize函数
resize()函数会修改原始数组,不会返回任何数据,直接对原始数组进行修改:
ndarray.resize(new_shape, refcheck=True)
参数new_shape是元组或n个int数字,表示数组的形状。
>>> a.resize((2,6))
>>> a
array([[ 2., 8., 0., 6., 4., 5.],
[ 1., 1., 8., 9., 3., 6.]])
3,展开数组
ravel()用于返回数组的展开形式,在展开成一维数组时,最右边的索引“变化最快”。
numpy.ravel(a, order='C')[source]
举个例子,从行维度和列维度的最小值开始,依次增加,获取的元素依次排列,构成一维数组:
>>> x = np.array([[1, 2, 3], [4, 5, 6]])
>>> np.ravel(x)
array([1, 2, 3, 4, 5, 6])
四,栅格数据
对于mgrid()函数,用于生成多维数据,参数是一个序列,常用于生成1维,2维和3维数据:
np.mgrid[ 第1维,第2维 ,第3维 , …]
第n维的书写形式为:
start:end:step
如果step为整数,表示间隔,左闭右开;如果step为 int + j,表示点数,左闭右闭。
对于np.meshgrid()用于生成网格型数据,接受两个一维数组生成两个二维矩阵,对应两个数组中所有的(x,y)对。
np.meshgrid(x, y)

参考文档:
Python 学习 第十一篇:numpy的更多相关文章
- 【Python学习之十一】Numpy
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 1.介绍NumPy(Numerical Pyt ...
- Python学习第十一篇——for 的本质及如何正确修改列表
假如现在有一个列表:magicians_list = ['mole','jack','lucy'],现在想通过一个函数来实现,在列表的每个元素前面加上“the Great”的字样.现在通过一个函数来实 ...
- 【python自动化第十一篇】
[python自动化第十一篇:] 课程简介 gevent协程 select/poll/epoll/异步IO/事件驱动 RabbitMQ队列 上节课回顾 进程: 进程的诞生时为了处理多任务,资源的隔离, ...
- Python 学习 第十篇 CMDB用户权限管理
Python 学习 第十篇 CMDB用户权限管理 2016-10-10 16:29:17 标签: python 版权声明:原创作品,谢绝转载!否则将追究法律责任. 不管是什么系统,用户权限都是至关重要 ...
- Python学习笔记进阶篇——总览
Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Pyth ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- Python学习笔记——基础篇【第七周】———类的静态方法 类方法及属性
新式类和经典类的区别 python2.7 新式类——广度优先 经典类——深度优先 python3.0 新式类——广度优先 经典类——广度优先 广度优先才是正常的思维,所以python 3.0中已经修复 ...
- 从.Net到Java学习第十一篇——SpringBoot登录实现
从.Net到Java学习系列目录 通过前面10篇文章的学习,相信我们对SpringBoot已经有了一些了解,那么如何来验证我们的学习成果呢?当然是通过做项目来证明啦!所以从这一篇开始我将会对之前自己做 ...
- Python 学习笔记---基础篇
1. 简单测试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200 import subprocess cmd="cmd.exe" b ...
随机推荐
- PostgreSQL date_trunc() 和timestamp
timestamp 01.SELECT now()::timestamp + '1 year'; 02.SELECT now()::timestamp + '1 month'; 03.SELECT n ...
- The concurrent snapshot for publication 'xxx' is not available because it has not been fully generated or the Log Reader Agent is not running to activate it
在两台测试服务器部署了复制(发布订阅)后,发现订阅的表一直没有同步过来.重新生成过snapshot ,也重新初始化过订阅,都不能同步数据,后面检查Distributor To Subscriber H ...
- SQLServer2016 AlwaysOn AG基于工作组的搭建笔记
最近搭建了一套SQLServer2016 AlwaysOn AG. (后记:经实际测试,使用SQLServer2012 也同样可以在Winserver2016上搭建基于工作组的AlwaysOn AG, ...
- 如何下载 Google Play 应用的apk
Google Play 不能直接下载apk安装包,解决办法,安装插件下载 第一步 FQ就不说了 第二步 安装google浏览器 APK Downloader插件 第三步 打开Google play网站 ...
- MySQL复制错误1837的相关缺陷一例
故障现象 主从gtid报错,复制错误1837,这个复制故障可以说是第一次遇到. Last_Errno: 1837 Last_Error: Error 'When @@SESSION.GTID_NEXT ...
- 开发nginx启动脚本及开机自启管理(case)
往往我们在工作中需要自行写一些脚本来管理服务,一旦服务异常或宕机等问题,脚本无法自行管理,当然我们可以写定时任务或将需要管理的脚本加入自启等方法来避免这种尴尬的事情,case适用与写启动脚本,下面给大 ...
- vim 高亮
vim 高亮显示所选单词在文中全部出现的地方: ’g' + 'd'
- php学习----基本介绍及数据类型
php 官方手册:http://php.net/manual/zh/ 1.PHP(全称 Hypertext Preprocessor,超文本预处理器的字母缩写)是一种服务器端脚本语言,它可嵌入到 HT ...
- C语言 文件的读写操作
//凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ #include<stdio.h> #include<stdlib.h> void ...
- 《Java大学教程》—第8章 通过继承扩展类
8.2 继承(inheritance):继承是指在类之间共享属性和方法.继承关系是一种层次关系.在继承关系中位于顶部的类称为超类(或基类),位于下面的类称为子类(或派生类).类型转换(type ...