NumPy
NumPy是一个开源的Python科学计算基础库,包含:
- 一个强大的N维数组对象ndarray
- 广播功能函数
- 整合C/C++/Fortran代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
NumPy是SciPy、Pandas等数据处理或科学计算库的基础
N维数组对象:ndarray
Python已有列表类型,为什么需要一个数组对象(类型)?
- 数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据
- 设置专门的数组对象,经过优化,可以提升这类应用的运算速度
观察:科学计算中,一个维度所有数据的类型往往相同 - 数组对象采用相同的数据类型,有助于节省运算和存储空间
ndarray是一个多维数组对象,由两部分构成:
- 实际的数据
- 描述这些数据的元数据(数据维度、数据类型等)
ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始
实例:
In [1]: import numpy as np
In [2]: a=np.array([[0,1,2,3,4],
...: [9,8,7,6,5]])
In [3]: a
Out[3]:
array([[0, 1, 2, 3, 4],
[9, 8, 7, 6, 5]])
In [4]: print(a)
[[0 1 2 3 4]
[9 8 7 6 5]]
备注:IPython换行用Shift + Enter
运行
轴(axis): 保存数据的维度;秩(rank):轴的数量
ndarray对象的属性
属性 | 说明 |
---|---|
.ndim | 秩,即轴的数量或维度的数量 |
.shape | ndarray对象的尺度,对于矩阵,n行m列 |
.size | ndarray对象元素的个数,相当于.shape中n*m的值 |
.dtype | ndarray对象的元素类型 |
.itemsize | ndarray对象中每个元素的大小,以字节为单位 |
实例:
In [5]: a=np.array([[0,1,2,3,4],
...: [9,8,7,6,5]])
In [6]: a.ndim
Out[6]: 2
In [7]: a.shape
Out[7]: (2, 5)
In [8]: a.size
Out[8]: 10
In [9]: a.dtype
Out[9]: dtype('int32')
In [10]: a.itemsize
Out[10]: 4
ndarray的元素类型
数据 | 类型说明 |
---|---|
bool | 布尔类型,True或False |
intc | 与C语言中的int类型一致,一般是int32或int64 |
intp | 用于索引的整数,与C语言中ssize_t一致,int32或int64 |
int8 | 字节长度的整数,取值:[‐128, 127] |
int16 | 16位长度的整数,取值:[‐32768, 32767] |
int32 | 32位长度的整数,取值:[‐231, 231‐1] |
int64 | 64位长度的整数,取值:[‐263, 263‐1] |
uint8 | 8位无符号整数,取值:[0, 255] |
uint16 | 16位无符号整数,取值:[0, 65535] |
uint32 | 32位无符号整数,取值:[0, 232‐1] |
uint64 | 32位无符号整数,取值:[0, 264‐1] |
float16 | 16位半精度浮点数:1位符号位,5位指数,10位尾数 (符号)尾数*10指数
|
float32 | 32位半精度浮点数:1位符号位,8位指数,23位尾数 |
float64 | 64位半精度浮点数:1位符号位,11位指数,52位尾数 |
complex64 | 复数类型,实部和虚部都是32位浮点数 |
complex128 | 复数类型,实部和虚部都是64位浮点数 实部(.real) + j虚部(.imag)
|
ndarray为什么要支持这么多种元素类型?
对比:Python语法仅支持整数`、浮点数和复数3种类型
- 科学计算涉及数据较多,对存储和性能都有较高要求
- 对元素类型精细定义,有助于NumPy合理使用存储空间并优化性能
- 对元素类型精细定义,有助于程序员对程序规模有合理评估
网友评论