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)

参考文档:

Numpy Quickstart tutorial

Python 学习 第十一篇:numpy的更多相关文章

  1. 【Python学习之十一】Numpy

    环境 虚拟机:VMware 10  Linux版本:CentOS-6.5-x86_64  客户端:Xshell4 FTP:Xftp4 python3.6 1.介绍NumPy(Numerical Pyt ...

  2. Python学习第十一篇——for 的本质及如何正确修改列表

    假如现在有一个列表:magicians_list = ['mole','jack','lucy'],现在想通过一个函数来实现,在列表的每个元素前面加上“the Great”的字样.现在通过一个函数来实 ...

  3. 【python自动化第十一篇】

    [python自动化第十一篇:] 课程简介 gevent协程 select/poll/epoll/异步IO/事件驱动 RabbitMQ队列 上节课回顾 进程: 进程的诞生时为了处理多任务,资源的隔离, ...

  4. Python 学习 第十篇 CMDB用户权限管理

    Python 学习 第十篇 CMDB用户权限管理 2016-10-10 16:29:17 标签: python 版权声明:原创作品,谢绝转载!否则将追究法律责任. 不管是什么系统,用户权限都是至关重要 ...

  5. Python学习笔记进阶篇——总览

    Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Pyth ...

  6. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  7. Python学习笔记——基础篇【第七周】———类的静态方法 类方法及属性

    新式类和经典类的区别 python2.7 新式类——广度优先 经典类——深度优先 python3.0 新式类——广度优先 经典类——广度优先 广度优先才是正常的思维,所以python 3.0中已经修复 ...

  8. 从.Net到Java学习第十一篇——SpringBoot登录实现

    从.Net到Java学习系列目录 通过前面10篇文章的学习,相信我们对SpringBoot已经有了一些了解,那么如何来验证我们的学习成果呢?当然是通过做项目来证明啦!所以从这一篇开始我将会对之前自己做 ...

  9. Python 学习笔记---基础篇

    1. 简单测试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200 import subprocess cmd="cmd.exe" b ...

随机推荐

  1. 卸载(uninstalled)Mac os Jenkins pkg 安装包

    有些小伙伴不熟悉Jenkins, 在mac上安装,会选择pkg 安装包, 安装后又想卸载,苦于卸载不干净,今天给到一个命令即可搞定. 对应qq群号:616961231打开终端输入下面命令'/Libra ...

  2. apk公钥私钥用法

    每个密钥都包含两个文件:一个是扩展名为 .x509.pem 的证书,另一个是扩展名为 .pk8 的私钥.私钥需要加以保密,并用于对 apk 包进行签名.密钥本身也可能受密码保护.相比之下,证书只包含公 ...

  3. You (root) are not allowed to access to (crontab) because of pam configuration

    巡检发现一台Linux服务器上的作业没有如期发送邮件,登录服务器检查后发现作业并没有执行,于是检查一下crontab的设置.结果发现如下错误: [root@mylnx2 ~]# crontab -l ...

  4. [20181109]12c sqlplus rowprefetch参数5

    [20181109]12c sqlplus rowprefetch参数5.txt --//这几天一直在探究设置sqlplus参数rowprefetch与arraysize的关系,有必要做一些总结以及一 ...

  5. Nginx location配置详解

    上一篇博客Nginx配置详解已经说过了nginx 的基本配置情况,今天来详细讲述一下nginx的location的配置原则, location是根据Uri来进行不同的定位,location可以把网站的 ...

  6. SSL 原理及 https 配置

    目录 1. SSL 原理 1.1. SSL 简介 1.2. 主要概念 1.3. 建立安全连接的过程 2. https 配置 (以 nginx 为例) SSL 原理 SSL 简介 SSL (Secure ...

  7. February 24th, 2018 Week 8th Saturday

    Those are my principles, and if you don't like them... well, I have others. 那是我的原则,要是你不喜欢......那我还有其 ...

  8. 序列对象(bytearray, bytes,list, str, tuple)

    列表: L.append(x) # x追加到L尾部 L.count(x) # 返回x在L中出现的次数 L.extend(m) # Iterable m的项追加到L末尾 L += m # 功能同L.ex ...

  9. ubuntu使用遇到的问题

    1.不适当操作,改了sudoers的权限 scdev@scdev1005:~$ sudo vim /etc/profilesudo: /etc/sudoers is owned by uid 1000 ...

  10. https验证证书的三个级别

    一.无条件信任证书 1. func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge ...