1.基础
Numpy与python列表的区别:
numpy数组中的所有元素必须是相同的数据类型,在创建时指定
python列表中可以由多种数据类型
numpy数组提供了多种数学函数和操作,比如矩阵运算、线性代数、傅里叶变换等
python只提供基础列表操作,比如添加、删除、切片、排序等
2.ndarray
numpy定义了一个n维数组对象,简称ndarray对象,是一个一系列相同元素组成的数组,每个元素所占大小相同内存块。
ndarray采用数组索引机制,常用的布局方式有两种:按行或按列
特点:ndarray表示任意数组,如一维、二维、三维等
数据同质
连续存储
功能丰富
(1)创建对象:numpy.array(object, dtype = None, copy = True, order = None,ndmin = 0)
参数解释:
object:表示一个数组序列
dtype:可选参数,通过它可以更改数组的数据类型
copy:可选参数,表示数组能否被复制,默认是 True
order:以哪种内存布局创建数组,有 3 个可选值,分别是 C(行序列)/F(列序列)/A(默认)
ndmin:用于指定数组的维度
(2)指定/查看数组维度
数组的维度就是一个数组中的某个元素,当用数组下标表示的时候,需要用几个数字来表示才能唯一确定这个元素,这个数组就是几维
(3)reshape数组变维
reshape() 函数允许你在不改变数组数据的情况下,改变数组的维度。
reshape() 返回的是一个新的数组,原数组的形状不会被修改
3.数据类型
常用:
bool_:布尔型数据类型(True 或者 False)
int_:默认整数类型,类似于 C 语言中的 long,取值为 int32 或 int64
uint8:1字节(8位)无符号整数
float_:float64 类型的简写(默认的float64)
complex_:复数类型,与 complex128 类型相同
str_:表示字符串类型,等价于unicode_
bytes_:表示字节串类型,基于字节
string_:表示字节串类型,等价于`bytes_`,基于字节,NumPy 2.0以后版本被移除,使用`bytes_`代替
unicode_:表示字节串类型,基于字符,NumPy 2.0以后版本被移除,使用str_`代替
注:int_、float_、comlex_下划线中有多种选择,比如int32,代表4字节整数
(1)数据类型对象
又称dtype对象
使用:可以在创建数组时指定dtype参数来定义数组中元素的数据类型
import numpy as np
# 创建一个 int32 类型的数组
arr_int = np.array([1, 2, 3], dtype=np.int32)
print(arr_int.dtype) # 输出: int32
(2)数据类型标识码
每种数据类型都有唯一标识字符码
b:代表布尔型
i:带符号整型
u:无符号整型
f:浮点型
i8:i1
u32:u4
浮点float32:f4
布尔类型bool:b1
4.数组属性
(1)shape
返回一个元组,元组中的每个元素表示数组在对应维度上的大小
属性功能:
返回一个由数组维度构成的元组
通过赋值,可以用来调整数组维度的大小
(2)ndim
返回的是数组的维数
(3)itemsize
返回数组中每个元素的大小(以字节为单位),即每个元素占用的字节数
(4)flags
返回 ndarray 数组的内存信息
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
5.创建数组的其他方法
(1)empty()用来创建一个指定形状(shape)、数据类型(dtype)且**未初始化**的数组(数组元素为随机值)
numpy.empty(shape, dtype = float, order = 'C')
(2)zeros()创建指定大小的数组,数组元素以 0 来填充
numpy.zeros(shape, dtype = float, order = 'C')
(3)ones()创建指定形状的数组,数组元素以 1 来填充
numpy.ones(shape, dtype = None, order = 'C')
(4)arange() 函数用于创建一个等差数列的数组。它类似于 Python 内置的 range() 函数,但返回的是一个 NumPy 数组而不是一个列表。
numpy.arange(start, stop, step, dtype)(有点类似于range(),但是是生产数组)
(5)linspace在指定的数值区间内,返回均匀间隔的一维等差数组,默认均分 50 份
主动给定一个范围,和份数,计算机将返回平均分成的份数,等差数列
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
6.切片
ndarray 对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样;
省略号 ... 的作用
表示所有维度: 省略号用于表示数组的所有维度。例如,array[..., 1] 表示取所有行的第 1 列。
重要:slice返回的数组是原数组的一个视图,修改数据会影响原数组中的数据。
7.高级索引
(1)整数数组索引
使用数组访问数组,比如二维数组[[2,3,4],[7,8,9]],访问8则利用[1][1]
返回的新数组是一个**副本**,修改它不会影响原数组。
(2)布尔索引
布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。
**逻辑运算符**:
选定特定元素后,返回特定位置的布尔值,表示是否选中
- &:与运算,组合多个条件。
- |:或运算,组合多个条件。
- ~:非运算,取反条件
8.广播
)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。这要求维数相同,且各维度的长度相同,如果不相同,可以通过广播机制,这种机制的核心是对形状较小的数组,在横向或纵向上进行一定次数的重复,使其与形状较大的数组拥有相同的维度。
**广播规则**
用简单的类型来表示:
匹配行列中的一种,被匹配项必须为一列或一列
3行2列和3行1列
2行3列和1行3列
不匹配抛出异常
一维数组与标量相加**:
元素都加标量
二维数组与一维数组相加:
二维中相匹配形状项每项都加一维数组相对应元素
二维数组与二维数组相加**:
arr2d_broadcast 被广播到与 arr2d 相同的形状,然后进行逐元素相加。
9.遍历数组
(1)遍历数组的第一维度
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
for i in arr:
print(i)
返回的是一行一行的
(2)nditer逐个访问元素
**nditer** 是 NumPy 中的一个强大的迭代器对象,用于高效地遍历多维数组。nditer 提供了多种选项和控制参数,使得数组的迭代更加灵活和高效。
参数:order 参数用于指定数组的遍历顺序。默认情况下,nditer 按照 C 风格(行优先)遍历数组。
flags 参数用于指定迭代器的额外行为。
multi_index: 返回每个元素的多维索引。
external_loop: 返回一维数组而不是单个元素,减少函数调用的次数,从而提高性能。
可以按照遍历的对象逐个返回相对应的索引