NumPy
一、NumPy 历史
- 1995年 Jim HugUNin 开发了 Numeric。
- 随后 Numarry 包诞生。
- Travis Oliphants 整合 Numeric 和 Numarray,开发 NumPy ,2006 年第一个版本诞生。
- 使用 Anaconda 发型版的 Python,已经安装好 NumPy模块,所以可以不用再安装 NumPy 模块了。也可以使用命令 pip install numpy 安装 NumPy 模块。
- 依照标准的 NumPy 标准,习惯使用 import numpy as np 的方式导入该模块
二、NumPy 模块
1、NumPy:Numerical Python,即数值 Python 包,是 Python 进行科学计算的一个基础包,所以是一个掌握其他 Scipy 库中模块的基础模块,一定需要先掌握该包的主要使用方式。
2、官网:http://www.numpy.org/
3、官方文档:https://docs.scipy.org/doc/numpy/user/index.html
4、NumPy 模块是 Python 的一种开源的数值计算扩展,是一个用 Python 实现的科学计算包,主要包括:
(1) 一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组,称为 ndarray(N-dimensional array object)。
(2) 用于对整组数据进行快速运算的标准数学函数:ufunc(universal function object)。
(3) 实用的线性代数、傅里叶变换的随机数生成函数。
(4) NumPy 和 稀疏矩阵 的运算包 Scipy 配合使用更加方便。
三、NumPy 核心数据结构:ndarray
1、NumPy 的数组类被称作 ndarray。通常被称作数组。注意 numpy.array 和标准 Python 库类 array.array 并不相同,后者只处理一维数组和提供少量功能。
2、一种由相同类型的元素组成的多维数组,元素数量是事先给定好的。
3、元素的数据类型由 dtype(data-type) 对象来指定,每个 ndarray 只有一种 dtype 类型。
4、ndarray 的大小固定,创建好数组后数组大小是不会发生改变的。
四、ndarray 创建
1、可以通过 numpy 模块中常用的几个函数进行创建 ndarray 多维数组对象,主要函数如下:
(1) array 函数:接收一个普通的 python 序列,并将其转换为 ndarray。
(2) zeros 函数:创建指定长度或者形状的全零数组。
(3) ones 函数:创建指定长度或者形状的全1数组。
(4) empty 函数:创建一个没有任何具体值的数组(准确的说是创建一个未初始化数值的 ndarray 数组)。
如果之前创建过相同维度的数组,则empty()将创建与之前相同的数组。
2、ndarray 其他创建方式
(1) arange 函数:类似 python 的 range 函数,通过指定开始值、终值和步长来创建一个一维数组,注意:最终创建的数组不包含终值。
(2) linspace 函数:通过指定开始值、终值和元素个数来创建一个一维数组,数组的数据元素符合等差数列,可以通过 endpoint 关键字指定是否包含终值,默认包含终值。
(3) logspace 函数:和 linspace 函数类似,不过创建的是等比数列数组。
(4) 使用随机数填充数组,即使用 numpy.random 中的 random() 函数来创建 0-1 之间的随机元素,数组包含的元素数量由参数决定。
五、ndarray 对象属性
1、ndim 数组轴(维度)的个数,轴的个数被称作秩。
2、shape 数组的维度,例如一个2行3列的矩阵,它的 shape 属性将是 (2, 3),这个元组的长度显然是秩,即维度或者ndim属性。
3、size 数组元素的总个数,等于 shape 属性中元组元素的乘积。
4、dtype 一个用来描述数组中元素类型的对象,可以通过创建或指定dtype使用标准Python类型。不过NumPy提供它自己的数据类型。
5、itemsize 数组中每个元素的字节大小。例如,一个元素类型为 float64的数组 itemsize 属性值为 8(=64/8),又如,一个元素类型为 complex32 的数组 itemsize 属性值为 4(=32/8)。
六、ndarray 中元素数据类型
创建 numpy 数组的时候可以通过属性 dtype 显示指定数据类型,如果不指定的情况下,numpy 会自动推断出适合的数据类型,所以一般不需要显示给定数据类型。
七、NumPy 基本数据类型
1、数值型 dtype 的命名方式为:一个类型名称(eg:int、float等),后接一个表示各个元素位长的数字。
(1) 比如 Python 的 float 数据类型(双精度浮点值),需要占用8个字节(64位),因此在 NumPy 中记为 float64。
2、每个数据类型都有一个类型代码,即简写方式。
3、如果需要更改一个已经存在的数组的数据类型,可以通过 astype 方法进行修改从而得到一个新数组。
数据类型 | 类型简写 | 说明 |
---|---|---|
int_ | 默认整型 | |
intc | 等价于long的整型 | |
int8 | i1 | 字节整型,1个字节,范围:[-128,127] |
int16 | i2 | 整型,2个字节,范围:[-32768,32767] |
int32 | i4 | 整型,4个字节,范围:[-2^31,2^31-1] |
int64 | i8 | 整型,8个字节,范围:[-2^63,2^63-1] |
unit8 | u1 | 无符号整型,1个字节,范围:[0, 255] |
unit16 | u2 | 无符号整型,2个字节,范围:[0, 65535] |
unit32 | u4 | 无符号整型,4个字节,范围:[0, 2^32-1] |
unit64 | u8 | 无符号整型,8个字节,范围:[0, 2^64-1] |
bool_ | 以一个字节形式存储的布尔值(True 或者 False) | |
float_ | float64简写形式 | |
float16 | F2 | 半精度浮点型(2字节):1符号位+5位指数+10位的小数部分 |
float32 | F4或者f | 单精度浮点型(4字节):1符号位+8位指数+23位的小数部分 |
float64 | F8或者d | 双精度浮点型(8字节):1符号位+11位指数+52位小数部分 |
complex_ | c16 | complex128的简写形式 |
complex64 | c8 | 复数,由两个32位的浮点数来表示 |
complex128 | c16 | 复数,由两个64位的浮点数来表示 |
object | O | Python对象类型 |
String_ | S | 固定长度的字符串类型(每个字符1个字节),比如:要创建一个长度为8的字符串,应该使用S8 |
Unicode_ | U | 固定长度的unicode类型的字符串(每个字符串占用字节数由平台决定),长度定义类似String_类型 |
4、实例:
大端小端:
一种是将低序字节存储在起始地址,这称为小端(little-endian)字节序;
另一种方法是将高序字节存储在起始地址(低地址),这称为大端(big-endian)字节序。
八、ndarray 修改形状
1、对于一个已经存在的 ndarray 数组对象而言,可以通过修改形状相关的 参数 / 方法 从而改变数组的形状。
(1) 直接修改数组 ndarray 的 shape 值,要求修改后乘积不变;
(2) 直接使用 reshape 函数创建一个改变尺寸的新数组,原数组的 shape 保持不变,但是新数组和原数组共享一个内存空间,也就是修改任何一个数组中的值都会对另外一个产生影响,另外要求新数组的元素个数和原数组一致(还可以降维操作)。
2、当指定一个轴为 -1 的时候,表示将根据数组元素的数量自动计算该轴的长度值。