ndarray 多维数组(N Dimension Array)
- ndarray多维数组的介绍
- NumPy数组是一个多维的数组对象(矩阵),称为ndarray,具有高效的算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点。
- ndarray拥有的属性
- ndim属性: 维度个数,整数类型
- shape属性:维度大小,返回的是一个元组,表示每个维度包含下级元素的个数
- dtype属性:数据类型,ndarray的数据类型其中一种
- 导入模块的方式
- import numpy as np
ndarray的数据类型
- ndarray的数据类型要保持统一
ndarray数据的创建和转化
- 数组的创建
- 随机数组创建 np.random
- np.random.rand(v1, v2, v3 , ...) 生成指定唯独的随机多浮点数组,数据的区间为0.0~1.0
- 参数:有几个代表创建的是几维数组
- 最后一个参数表示每个一维数组有几个元素
- 倒数第二个参数表示二维数组有几个一维数组
- 倒数第三个参数表示三维数组有几个二维数组,以此类推
- 生成一个v1*v2*v3的多维数组
- 示例:
- np.random.randn(n) 生成一个包含指定元素个数的正太分布数组
- 参数
- n:表示数组中包含正态分布元素个数
- 示例
- np.random.uniform(start, end, size=(x, y, z))生成指定维度大小的随机多维浮点数组,可指定数字区间
- 参数
- start: 表示数据的起始范围
- end:表示数据的终止范围区间
- size:表示数组的大小, 维度大小为x*y*z
- 示例
- np.random.randint(start, end, size=(x, y, z) ) 生成指定维度大小的随机多维整形数组,可指定数字区间
- 参数
- start: 表示数据的起始范围
- end:表示数据的终止范围区间
- size:表示数组的大小, 维度大小为x*y*z
- 示例
- 指定序列的方式创建
- np.array(list/list of list,[dtype]) 生成指定的数组
- 参数
- list 为 序列型对象(list)、嵌套序列对象(list of list)
- dtype表示数据类型 (int、float、str)
- 示例
- np.arange(param1, [param2, step]) 可以像 np.array(range()) 一样创建一个连续元素的一维的ndarray
- 参数
- param1: 表示param1-param2区间(左闭右开)的所有整数,param2省略表示0-param1
- step: 表示选取区间元素时的步长,默认为1
- 示例
- 数组的初始化
- np.zeros((param1, param2), [dtype]) 生成指定大小的全0数组
- 参数:
- 生成param1*param2的多维数组
- dtype:指定数据的类型,默认为float浮点型
- 示例
- np.ones((param1, param2), [dtype]) 生成大小全部为1的数组
- 参数:
- 生成param1*param2的多维数组
- dtype:指定数据的类型,默认为float浮点型
- 示例
- 数组的转化
- ndarray.reshape(param1, param2) 用来重新修改数组的维度,修改每个维度大小,不改变原数组
- 参数
- param2:表示重新定义的维度的数组的一维数组有多少个元素
- param1:表示重新定义维度的数组的二维数组有多少个一维数组,以此类推
- 示例
- 备注
- 必须保证修改后的数组的元素和原数组元素个数相同
- np.random.shuffle(ndarray) 用来打乱数组序列,重新排列(类似于洗牌),会改变原数组
- 参数:
- ndarray:传入一个数组对象
- 示例
- ndarray.astype(dtype) 用来转换数组的数据类型
- 参数
- dtype:转化的数据类型
- 示例
- ndarray.transpose((x, y, z)) ndarray的维度转置,不改变原数组
- 参数
- x,y, z: 对应将之前维度替换为当前的维度映射
- 备注
- 二维数组直接使用转换函数,将行和列进行转换:transpose()
- 高维数组转换要指定维度编号参数 (0, 1, 2, …),注意参数是元组
- 维度和元素总个数不能改变,只能改变每个维度的大小
- 示例
ndarray的矩阵运算
- ndarray的矩阵运算的介绍
- 矩阵、标量、向量/矢量是数学概念,数组是编程中的概念。
- 在计算机编程中,矩阵可以用数组形式表示,标量可以用数值表示,向量/矢量可以用数据结构表示。
- 向量化/矢量化:就是将自然数据,转化为计算机可以处理的数据结构。
- 数组和数组之间的运算
- 运算方法:
- 数组和数组之间的运算:arr2 + arr2 , 将两个数组维度大小一致、数组维度个数一致、元素个数一致的数组,按下标对应进行运算,并返回新的数组副本
- 尾部维度相同情况:如果一个一维数组的列数和另一个多维数组的列数相同,可以参与运算,相当于将多维数组拆分为多个一维数组运算,最后合并一个多维数组
- ndarray的矩阵运算 + - * / ** // %, < > ==
- 当数据类型不一致时,那么int-->float, int/float-->str
- 示例
- 数组和数值之间的运算(广播运算)
- 运算方法
- 将数组的每个元素与数值相运算,返回维度一致的新数组
- ndarray的矩阵运算 + - * / ** // %, < > ==
- 示例
ndarray的索引与切片
- 一维度数据的索引与切片
- 语法:
- 索引:arr[i]
- 切片:arr[r1:r2]
- 示例
- 多维数的的索引与切片
- 语法:
- 索引:
- 取单个索引
- arr[1,1] <==> arr[1][1]
- 切片:
- 连续切片
- arr[1][1:4] 取一行多列
- arr[r1:r2, c1:c2] 取多行多列
- arr[r1:r2][c1:c2] 多行多列错误的写法
- 不连续索引切片
- arr[ [0, 2] ] 返回 [ arr[0] arr[2] ]
- arr[ [0, 2], [0, -1] ] 返回 [ arr[0][0] arr[2][-1] ]
- 示例
- 条件索引
- 语法:
- arr[condition],condition也可以是多个条件组合。
- 多个条件组合要使用 & | ~ 连接,而不是Python的 and or not。
- 原理
- 将bool索引应用到被过滤的数组上,将返回bool值为True的数据组成的一维数组
- 示例
- 查询数组中元素的索引
- np.argwhere(condition)
- 查询满足条件元素的索引
数组和python列表之间的转化
- 将数组转化为列表
- list = arr.tolist( ) 返回的是一个列表