Numpy 是 Numerical Python 的简称,是高性能计算和数据分析的基础包,是 Python 的一个重要补充库。Numpy 支持高维度数组与矩阵计算,也针对数组运算提供了大量的数学函数库。Numpy 运算效率极好,是大量机器学习框架的基础库。
ndarray 对象
Numpy 中主要包含一个强大的 N 维数组对象 ndarray、整合了 C/C++ 和 FORTRAN 代码的工具包,以及丰富的数学函数库,尤其是实用的线性代数、傅里叶变换和随机数生成的函数。
ndarray 对象是一系列同类型数据的集合下标索引从 0 开始,是一个用于存放同类型元素的多维数组。ndarray 中的每个元素在内存中都具有相同大小的存储区域。
1. ndarray 的内部结构
相对于标准的数组,ndarray 本质上是一个数据结构。
ndarray 内部主要由以下内容构成:
- shape:数组形状,表示数组各维大小的整数元组。
- dtype:数据类型,描述数组的类型对象。对象类型为内置的 24 种数组标量类型的一种。
- data:数组数据,指向内存中数据的指针。
- strides:跨度,一个元组,表示当前维度移动到下一个位置需要跨越的字节数。跨度可以是负数,这样会使数组在内存中向后移动。
- order:访问数组元素的主顺序,如 “C” 为行主序,“F” 为列主序。
2. 创建 ndarray
在 Numpy 库中,提供了 ndarray() 和 array() 两个函数,都可以用来建立一个 ndarray。其中 ndarray() 函数属于底层的方法,一般情况下,建立数组使用的是更为便捷的 array() 函数。
一般格式如下:
numpy.array(object, dtype = None, copy = True, order = None, subok = Falae, ndmin = 0)
主要参数:
object
:数组或嵌套的数列。dtype
:数组元素的数据类型,可选。order
:创建数组的样式,C 为行方向,F 为列方向,A 为任意方向(默认)。ndmin
:指定一个一维 ndarray 数组。
示例:
import numpy as np
a1 = np.array([1, 2, 3]) # 建立一个一维 adarray 数组
a2 = np.array([[1, 2], [3, 4]]) # 创建一个二维数组
a_ndmin = np.array([1, 2, 3, 4, 5], ndmin = 2) # 设置数组最小维度
a_dtype = np.array([1, 2, 3], dtype = np.complex) # 设置数组类型为复数
思考
C 数组的概念:数据类型一致的一个连续的内存空间。
Python list 列表:(C 语言说:列表其实是一个指针数组)列表不要求数据类型一致。
Numpy 的数组:同样是一个有序的,相同数据类型的集合。
Numpy 设计初衷是用于运算的,所以对数据类型进行统一优化。但需要注意:
- numpy 默认 ndarray 的所有元素的类型是相同的。
- 如果传进来的列表中包含不同的数据类型,则统一为同一类,优先级:str > float > int。
Numpy 数据类型
Numpy 内置了 24 种数组标量(Array Scaler)类型,也支持 Python 的基本数据类型,某种程度上可以和 C 语言的数据类型相对应,以下是基本的数据类型:
名称 | 描述 |
---|---|
bool_ | 布尔型,True 或 False |
int8 | 有符号字节类型,范围为 -128 ~ 127 |
int16 | 有符号 16 位整数,范围为 -32768 ~ 32767 |
int32 | 有符号 32 位整数,范围为 -231 ~ 231-1 |
int64 | 有符号 64 位整数,范围为 -263 ~ 263-1 |
uint8 | 有符号字节类型,范围为 0 ~ 255 |
uint16 | 无符号 16 位整数,范围为 0 ~ 65535 |
uint32 | 无符号 32 位整数,范围为 0 ~ 232-1 |
uint64 | 无符号 64 位整数,范围为 0 ~ 264-1 |
float_ | 64 位浮点数,同 float64 |
float16 | 16 位浮点数 |
float32 | 32 位浮点数 |
float64 | 64 位(双精度)浮点数,同 float_ |
complex_ | 128 位复数,同 complex128 |
complex64 | 64 位复数 * |
complex128 | 128 位复数,同 complex_ |
* 复数:形如 z = a + bi(a,b均为实数)的数称为复数,其中 a 称为实部,b 称为虚部,i 称为虚数单位(i 表示 -1 的平方根)。
当虚部 b = 0 时,复数 z 是实数;
当虚部 b != 0 且 实部 a = 0 时,复数 z 是纯虚数。
对于每种数据类型,Numpy 还提供了同名的类型函数,例如 float16()
、int32()
等,可以用来创建该类型的数据对象,也可以用来转换数据对象的数据类型。
1.数据类型对象(dtype)
Numpy 中的 dtype(data type object)是由
numpy.dtype
类产生的数据类型对象。其作用是描述数组元素对应的内存区域的各部分的使用。其内部结构包括数据类型、数据的字节数、各组成部分的顺序,各字段的名称等。
构造 dtype 对象的语法: numpy.dtype(object, align, copy)
主要参数如下:
- object:要转换为 dtype 对象的数据对象。
- align:如果为 True,则填充字段使其类似 C 的结构体。
- copy:指明是否复制 dtype 对象。如果为 False,则是对内置数据类型对象的引用。
2. 使用 astype() 修改数据类型
在数组建立之后,也可以使用 Numpy 中的数组附带的 astype() 方法修改其数据类型,格式如下:
array.astype(dtype, order='K', casting='unsafe', subok=True, copy=True)
另外,使用此方法还可以把 Python 的数据类型映射给 dtype 类型。
Python 对象 | dtype 对象 |
---|---|
int | numpy.int_ |
bool | numpy.bool_ |
float | numpy.float_ |
complex | numpy.complex_ |
扩展:Pandas 是基于 Numpy 数组的,所以 astype() 也能对 DataFrame 的字段进行类型转换。
NumPy 的核心数据结构是 ndarray,也是其最重要的概念之一。ndarray 是在内存中连续存储并由相同类型元素组成的多维数组对象,支持各种数学运算和通用函数(ufunc)运算。ndarray 既可以表示向量、矩阵等基本数据结构,也可以承载复杂数据,如图像、音频、文本及其他形式的数据集。Numpy 常用方法包括:创建数组、数组属性、数组索引和切片、数组的变形和转置、通用函数和数学运算、形状相关操作、数组统计和聚合操作、矩阵操作、随机数生成。
赞
马上要期末了,抓紧复习机会😭