第三章 NumPy数组操作相关函数
00 min
2024-5-13
默认执行了import numpy as np 并用numpy模块生成了变量名为arr的numpy.array数组对象

2.1 数组的形状变换函数

2.1.1 np.reshape和arr.reshape

  • np.reshape(a, newshape, order="C")
    • a:array_like,变换前的数组
    • newshape:int或int元组或列表;指定变换后的shape
      • int:一维数组
      • int元组:为指定的shape
    • order:{“C”,“F”,“A”} Default “C” ;根据指定的模式读取索引并对数组进行重塑
  • arr.reshape(newshape, order="C")
  • np.reshape和arr.reshape两者达到的效果是一样的
  • reshape是(n, -1) 或者(-1, m)形状,会自动匹配成(n, m),如果没有对应的m或n存在,或者变形前(n_0, m_0)和变形后(n_1, m_1)的元素数量不一致,程序会报错
  • 变形前后的ndarray中的元素是共享内存的,因此对变形后的任意个ndarray的某个元素进行修改,会导致其他对应的ndarray的元素同时被修改。
  • order参数默认为”C”,为”F”会首先对高纬度元素的索引进行变形
  • arr.reshape参数shape可以是元组,列表,也可以拆分成俩个int参数。
 

2.1.2 np.resize和arr.resize

resize函数和reshape函数大致一样,都是更改数组形状,但是本质上还是有较大区别。
  • np.resize(a, newshape)
    • return:返回经过形状变化后的新数组,原数组a不变,不共享内存
  • arr.resize(newshape, refcheck=False)
    • return:就地修改,无返回值

2.2 添加元素到数组末尾的函数

  • np.append(arr, values, axis=None)
    • values:用于指定需要添加的元素或数组
    • axis:(可以省略)初始值为None。指定在哪个坐标轴方向上使用append函数进行运算
    • return:返回添加元素之后得到的ndarray
 

2.3 数组的真假值判断函数

在NumPy中,包含使用ndarray元素对真假值进行判断的np.all和np.any两个很方便的函数
  • np.all:元素全为True返回True,否则为False
  • np.any:任意一个元素为True返回True,否则为False

语法

参数名
类型
概要
a
array_like
用于指定输入的数组或可以变换成数组的对象
axis
None、int或int元组
(可选)初始值为None,用于指定从哪个坐标轴方向上对元素进行访问
out
ndarray
(可选)初始为None,用于指定保存结果的数组
Keepdims
bool值
(可选)初始为False,用于指定在输出结果时,对于元素数量为1的维度是否也原样保留。如果指定为True,针对原有的数组自动使用广播机制进行计算
注意,np.all()中既可以是array_like对象,也可以是关于array_like对象的表达式。

2.4 指定条件获取元素索引函数

  • np.where(condition, [x, y])
    • return:所提取的ndarray元素的索引或者指定x,y的新数组
参数名
类型
概要
condition
array_like或bool值
用于指定条件或bool值
x,y
array_like
(可选)对于condition指定的条件或bool值,如果指定True,返回x;如果指定False,返回y。x、y的shape与原有的数组自动对齐(指定时需要同时对x、y进行指定
在讲获取目标元素的索引之前,先看下如何在数组中通过在索引部分给定条件获取目标元素
使用np.where函数获取的返回值是索引,不是索引对应的数值。
上面的二维数组的返回值可能会让你感到困惑,实际上取得的同样是索引,即获得的是行索引和列索引,组合着看就明白了。

np.where的三元运算符

可以灵活的运用x和y,对数组中元素满足条件的和不满足条件的元素的返回值进行指定,就会返回将该返回值作为元素的新的数组。需要注意的是,x和y必须同时指定。

2.5 最值筛选函数

语法

amax、max和amin、min函数只有返回值是不同的,而使用方法是完全相同的。
参数名
类型
概要
a
array_like
用于取得最值的数组
axis
int
(可选)初始为None,用于指定需要求取最小值的坐标轴方向。没有,则返回整个数组的最值
out
array_like
(可选)初始为None,指定用于保存返回值的数组或变量
keepdims
bool值
(可选)初始为No Value,如果指定,将保留和原有数组相同的维度

对np.NaN处理

只要元素中出现一个元素包含NaN属性,程序就会将NaN作为最值返回(最大或最小都是它)。如果要忽略掉NaN,就需要使用np.nanmaxnp.nanmin函数。

2.6 返回数组中最值的索引函数

语法

2.7 数组转置函数

在数学中,对使用的一维向量有着明确的说明,对行向量进行转置,就会变成列向量。然而在NumPy中,对于一维向量是行向量还是列向量并没有进行明确区分。因此,即使调用transpose函数对一维向量进行转置,也不会发生任何变化。
当然使用transpose函数对二维或者更高维度的数组进行转置时,数组中的元素就会发生变化。
对于转置,可以通过np.transposearr.transposearr.T这三个函数来实现
参数名
类型
概要
arr
array_like
指定需要转置的数组
axes
int的元组或n个并列的int
(可选)用于指定经过转置后的坐标轴(axis)的切换方法。不做任何指定,就会返回将坐标轴的
最后,arr.T是不需要对参数进行指定的arr.transpose()函数,可以像属性一样使用.

2.8 排序函数

语法:

kind参数

可选参数kind,初始值为“quiksort”,用于指定对数据进行排序的算法。包括“quicksort”、“mergsort”、“heapsort”这3种。

1、quicksort

quicksor算法是基于某个阈值对前后的元素进行互换,反复进行分割的同时实现数据排序的一种方法。这个算法非常实用,而且排序所需要的平均处理时间是最少的。如果是均匀分布的数组进行排序,时间复杂度为O(N log N).

2、mergesort

mergesort算法是通过对分割后的数组再次进行分割,并对分割后的数组进行合并的方式实现排序的一种算法。使用这个算法,即使数组不是均匀分布的,也可以在稳定的处理时间内实现对数组的排序。时间复杂度为O(N log N).

3、heapsort

heapsort算法首先将数组中的元素暂时保存在堆树中,然后再从最大的(最小)元素开始顺序地对元素进行提取的一种排序算法。所谓的最大堆结构,属于一种二叉树结构,它的每个父节点的值都必须大于其左右节点的值。这一算法的时间复杂度为O(N log N).
 

order参数

order参数可以指定需要按照哪个字段进行排序。

2.9 数组拼接函数

语法

参数名
类型
概要
tup
ndarray的元组
用于指定需要拼接的数组
在对于三维数组,水平拼接,还是在axis=1方向进行拼接,纵向拼接,也还是在axis=0上进行拼接。

2.10 数组扁平化

数组的扁平化的意思就是将多维数组转化为一维数组,通过arr.flattenarr.ravel函数
在性能上,arr.ravel函数要比arr.flatten函数执行速度更快,这是因为flatten函数分配了新的内存,而ravel函数的内存地址还是原来的内存地址。
对于需要对大量数据进行处理,即使进行了破坏性的修改也不会有什么影响,因此使用ravel这个函数可以有效地提升程序性能。
对于[[1, 2], [3, 4], [5, 6]]这中嵌套列表,一次遍历列表中每个元素,可以通过本节内容先扁平化,在进行遍历