numpy介绍

NumPy具有如下功能:

  • ndarray数组:一个具有矢量算术运算和复杂广播能力的多维数组,具有快速且节省空间的特点。
  • 对整组数据进行快速运算的标准数学函数(无需编写循环)。
  • 线性代数、随机数生成以及傅里叶变换功能。
  • 读写磁盘数据、操作内存映射文件。

ndarray数组

为什么引入ndarray数组

Python中的List列表也可以非常灵活的处理多个元素的操作,但效率却非常低。与之比较,ndarray数组具有如下特点:

  • ndarray数组中所有元素的数据类型相同、数据地址连续,批量操作数组元素时速度更快。而list列表中元素的数据类型可能不同,需要通过寻址方式找到下一个元素。
  • ndarray数组支持广播机制,矩阵运算时不需要写for循环。
  • NumPy底层使用C语言编写,内置并行计算功能,运行速度高于Python代码。

创建ndarray数组

创建ndarray数组最简单的方式就是使用array函数,它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组。

  • array:创建嵌套序列(比如由一组等长列表组成的列表),并转换为一个多维数组。

查看ndarray数组的属性

ndarray的属性包括shapedtypesizendim等,通过如下代码可以查看ndarray数组的属性。

  • shape:数组的形状 ndarray.shape,1维数组$(N, )$,2维数组$(M, N)$,$3维数组(M, N, K)$。
  • dtype:数组的数据类型。
  • size:数组中包含的元素个数ndarray.size,其大小等于各个维度的长度的乘积。
  • ndim:数组的维度大小ndarray.ndim, 其大小等于ndarray.shape所包含元素的个数。

ndarray数组的统计方法

​ 可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。主要包括如下统计方法: ​

  • mean:计算算术平均数,零长度数组的mean为NaN。
  • stdvar:计算标准差和方差,自由度可调(默认为n)。
  • sum :对数组中全部或某轴向的元素求和,零长度数组的sum为0。
  • maxmin:计算最大值和最小值。
  • argminargmax:分别为最大和最小元素的索引。
  • cumsum:计算所有元素的累加。
  • cumprod:计算所有元素的累积。 ​ —— 说明:summean以及标准差std等聚合计算既可以当做数组的实例方法调用,也可以当做NumPy函数使用。 ​ ——

1.7.2 随机数np.random

主要介绍创建ndarray随机数组以及随机打乱顺序、随机选取元素等相关操作的方法。

1.7.2.1 创建随机ndarray数组

创建随机ndarray数组主要包含设置随机种子、均匀分布和正态分布三部分内容,代码如下所示。

(1)设置随机数种子

# 可以多次运行,观察程序输出结果是否一致
# 如果不设置随机数种子,观察多次运行输出结果是否一致
np.random.seed(10)
a = np.random.rand(3, 3)
a

(2)均匀分布

# 生成均匀分布随机数,随机数取值范围在[0, 1)之间
a = np.random.rand(3, 3)

# 生成均匀分布随机数,指定随机数取值范围和数组形状
a = np.random.uniform(low = -1.0, high = 1.0, size=(2,2))

(3)正态分布

# 生成标准正态分布随机数
a = np.random.randn(3, 3)
a

线性代数

线性代数(如矩阵乘法、矩阵分解、行列式以及其他方阵数学等)是任何数组库的重要组成部分,NumPy中实现了线性代数中常用的各种操作,并形成了numpy.linalg线性代数相关的模块。本节主要介绍如下函数:

  • diag:以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)。
  • dot:矩阵乘法。
  • trace:计算对角线元素的和。
  • det:计算矩阵行列式。
  • eig:计算方阵的特征值和特征向量。
  • inv:计算方阵的逆。