4.数组属性
4.1 shape
返回一个元组,元组中的每个元素表示数组在对应维度上的大小。元组的长度等于数组的维度数。
shape 属性功能:
-
返回一个由数组维度构成的元组
-
通过赋值,可以用来调整数组维度的大小
4.2 数组维度
数组的维度就是一个数组中的某个元素,当用数组下标表示的时候,需要用几个数字来表示才能唯一确定这个元素,这个数组就是几维
ndmin
是 NumPy 中用于创建数组时指定最小维度的参数。它通常在 numpy.array()
函数中使用。通过 ndmin
,你可以确保生成的数组至少具有指定的维度。
ndim
是 NumPy 数组的一个属性,用于返回数组的维度数(即数组的秩)。它表示数组有多少个维度。
4.3 flags
flags 属性功能:
-
返回 ndarray 数组的内存信息
5.切片
ndarray 对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样;
5.1 slice()
在 Python 中,slice 可以作为一个对象来使用。你可以创建一个 slice 对象,然后使用它来获取序列的片段。
参数:
-
start 是切片开始的位置(包含该位置)。
-
stop 是切片结束的位置(不包含该位置)。
-
step 是切片的步长,即选取元素的间隔。
6.高级索引
NumPy 中的高级索引指的是使用整数数组、布尔数组或者其他序列来访问数组的元素。相比于基本索引,高级索引可以访问到数组中的任意元素,并且可以用来对数组进行复杂的操作和修改。
6.1 整数数组索引
整数数组索引是指使用一个数组来访问另一个数组的元素。这个数组中的每个元素都是目标数组中某个维度上的索引值。
适用于需要访问非连续元素或特定位置元素的场景。
注意:返回的新数组是一个副本,修改它不会影响原数组。
6.2 布尔索引
布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。
逻辑运算符:
-
&:与运算,组合多个条件。
-
|:或运算,组合多个条件。
-
~:非运算,取反条件。
7.广播(*)
广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。这要求维数相同,且各维度的长度相同,如果不相同,可以通过广播机制,这种机制的核心是对形状较小的数组,在横向或纵向上进行一定次数的重复,使其与形状较大的数组拥有相同的维度。
广播规则
-
维度匹配:如果两个数组的维度数不同,维度数较少的数组会在前面补上长度为 1 的维度。
2.形状匹配:如果两个数组在某个维度上的长度不同,但其中一个数组在该维度上的长度为 1,则该数组会沿着该维度进行广播。
3.不匹配:如果两个数组在某个维度上的长度既不相同也不为 1,则广播失败,抛出 ValueError。
8.遍历数组
8.1 遍历数组的第一维度
for i in arr:
遍历数组的第一维度,即按行或列的顺序逐个访问元素。
返回的是数组的子数组(如行或列),而不是单个元素。
8.2 nditer逐个访问元素
nditer 是 NumPy 中的一个强大的迭代器对象,用于高效地遍历多维数组。nditer 提供了多种选项和控制参数,使得数组的迭代更加灵活和高效。
控制参数
nditer 提供了多种控制参数,用于控制迭代的行为。
9.数组操作
9.1 数组变维
函数名称 | 函数介绍 |
---|---|
reshape | 在不改变数组元素的条件下,修改数组的形状 |
flat属性 | 返回是一个迭代器,可以用 for 循环遍历其中的每一个元素 |
flatten | 以一维数组的形式返回一份数组的副本,对副本的操作不会影响到原数组 |
ravel | 返回一个连续的扁平数组(即展开的一维数组),与 flatten不同,它返回的是数组视图(修改视图会影响原数组) |
9.1.1 reshape
reshape() 函数允许你在不改变数组数据的情况下,改变数组的维度。
reshape() 返回的是一个新的数组,原数组的形状不会被修改。reshape() 可以用于多维数组,例如将一个一维数组重塑为二维数组。
但是,reshape后产生的新数组是原数组的一个视图,即它与原数组共享相同的数据,但可以有不同的形状或维度,且对视图的修改会直接影响原数组。
元素总数必须匹配:新形状中的元素总数必须与原数组中的元素总数相同。
例如,一个长度为6的一维数组可以被重塑为 (2, 3) 或 (3, 2),表示原数组被重塑为2行3列或3行2列的数组,但不能被重塑为 (2, 2)。
9.1.2 flat
返回一个一维迭代器,用于遍历数组中的所有元素。无论数组的维度如何,ndarray.flat属性都会将数组视为一个扁平化的一维数组,按行优先的顺序遍历所有元素。
9.1.3 flatten()
用于将多维数组转换为一维数组。flatten() 返回的是原数组的一个拷贝,因此对返回的数组进行修改不会影响原数组。
9.1.4 ravel()
用于将多维数组转换为一维数组。与 flatten() 不同,ravel() 返回的是原数组的一个视图(view),而不是副本。因此,对返回的数组进行修改会影响原数组。
9.2 数组转置
9.3 升维和降维
多维数组(也称为 ndarray)的维度(或轴)是从外向内编号的。这意味着最外层的维度是轴0,然后是轴1,依此类推。
9.4 连接数组
9.5 分割数组
9.6 矩阵运算
np.dot
是一个通用的点积函数,适用于多种维度的数组。
-
对于二维数组(矩阵),
np.dot
等价于矩阵乘法。 -
对于一维数组(向量),
np.dot
计算的是向量的点积(内积)。 -
np.matmul
是专门用于矩阵乘法的函数,适用于二维及更高维度的数组。
np.linalg.det
计算一个方阵(行数和列数相等的矩阵)的行列式。