Numpy(一):

277 阅读4分钟

一、python中的数据类型(灵活但开销更大):

  1. 整型:实际上是指向C语言复合结构体的指针
  2. 列表:实际上是指向指针块的指针,其中每一个指针又指向一个完整的python对象

二、Numpy数组的创建:

  • 1.用np.array(list)创建:NumPy 要求数组必须包含同一类型的数据。如果类型不匹配,NumPy将会向上转换;可以用dtype关键字设置数据类型;NumPy 数组可以被指定为多维的,例如:np.array([range(i,i+3) for i in [1,2,3]])

  • 2.用内置方法创建:

  • np.zeros(10,dtype=int):创建一个长度为10的数组,数组的值都是0

  • np.ones((3,5),dtype=float):创建一个3×5的浮点型数组,数组的值都是1

  • np.full((3, 5), 3.14) :创建一个3×5的浮点型数组,数组的值都是3.14

  • np.arange(0, 20, 2) :创建一个从0开始,到20结束,步长为2 的数组(取前不取后)

  • np.linspace(0, 1, 5) : 创建一个5个元素的数组,这5个数均匀地分配到0~1

  • np.random.random((3, 3)):创建一个3×3的、在0~1均匀分布的随机数组成的数组

  • np.random.normal(0, 1, (3, 3)) :创建一个3×3的、均值为0、方差为1的正态分布的随机数数组

  • np.random.randint(0, 10, (3, 3)) :创建一个3×3的、[0, 10)区间的随机整型数组

  • np.eye(3):创建一个3×3的单位矩阵

  • np.empty(3) :创建一个由3个整型数组成的未初始化的数组,数组的值是内存空间中的任意值

  • PS:指定数据类型:当构建一个数组时,你可以用一个字符串参数来指定数据类型,或者用相关的 NumPy 对象来指定,例如:np.zeros(10, dtype='int16')或者np.zeros(10, dtype=np.int16)

三、Numpy数组的基本操作:

1.获取属性:

nidm(数组的维度) shape(数组每个维度的大小) size(数组的总大小) dtype(数组的数据类型) itemsize(每个数组元素字节大小) nbytes(数组总字节大小),一般来说,可以认为 nbytes 跟 itemsize 和 size 的乘积大小相等

2.索引:

一维数组中,你也可以通过中括号指定索引获取第 i 个值; 多维数组中,可以通过中括号指定索引获取第 i 行,也可以用逗号分隔的索引元组获取元素(中括号括起来而不是小括号); 也可以用以上索引方式修改元素值

3.切片: 一维数组:x[start:stop:step]; 多维切片也采用同样的方式处理,用冒号分隔,逗号之前表示行,逗号之后表示列,x[start:stop:step,start:stop:step]

4.获取单行单列: 通过索引+空切片, 例如x2[:, 0]表示x2的第一列 ;x2[0,:]表示第一行; 在获取行时,出于语法的简介考虑,可以省略空的切片,例如x2[0]表示第一行

注意: 在 Python 列表中,切片是值的副本; 在NumPy中,数组切片返回的是数组数据的视图,而 不是数值数据的副本,此时若要创建副本,可通过.copy()实现

5.数组的变形: reshape方法或者在切片中利用newaxis关键字

在这里插入图片描述
6.数组的拼接: 主要由 np.concatenate、np.vstack 和 np.hstack 例程实现

在这里插入图片描述
np.vstack(垂直栈)实现垂直拼接:
在这里插入图片描述
np.hstack(水平栈)实现水平拼接:
在这里插入图片描述
7.数组的分裂: 通过 np.split、np.hsplit 和 np.vsplit 函数来实现。 可以向以上函数传递一个索引列表作为参数,索引列表记录的是分裂点位置
在这里插入图片描述
np.hsplit 和 np.vsplit 的用法也类似:
在这里插入图片描述

四、通用函数(代替循环):

1.数组的运算: 直接用+、-、*、/、//、**、%等算数运算符 2.绝对值: np.abs(array) 3.三角函数: np.sin(array)、np.cos(array)、np.tan(array)、np.arcsin(array)、np.arccos(array)、np.arctan(array) 4.指数: np.exp(array)默认是e^x,若要设置指数,以2为例:可以通过np.exp2(array)或者np.power(2,array) 5.对数: np.log(array)默认是ln(x),若要设置底数,以2为例,可以通过np.log2(array) 6.专用的通用函数: scipy.special模块

五、高级的通用函数特性:

1.指定输出: 所有的通用函数 都可以通过 out 参数来指定计算结果的存放位置。对于较大的数组,通过慎重使用 out 参数 将能够有效节约内存。

在这里插入图片描述

2.聚合: 如果我们希望用一个特定的运算 reduce一个数组,那么可以用任何通用函数的 reduce 方法

在这里插入图片描述
如果需要存储每次计算的中间结果,可以使用 accumulate方法
在这里插入图片描述
3.外积: 任何通用函数都可以用 outer 方法获得两个不同输入数组所有元素对的函数运算结果。
在这里插入图片描述
在这里插入图片描述