NumPy ndarray基本操作

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( )  返回的是一个列表


刘小恺(Kyle) wechat
如有疑问可联系博主