numpy方法小结

649 阅读4分钟

一、创建ndarray:

  • np.array(data):参数接受一切序列型对象,如果传入等长的嵌套序列则转换为多维数组
  • np.arange():类似于range,不过返回的不是列表而是ndarray
  • np.ones()/np.ones_like():前者传入shape,后者传入另一个ndarray,创建全1数组
  • np.zeros()/np.zeros_like():前者传入shape,后者传入另一个ndarray,创建全0数组
  • np.empty()/np.empty_like():前者传入shape,后者传入另一个ndarray,创建数组的值是未初始化的垃圾值(不是0)
  • np.eye()/np.identity():创建单位矩阵

二、数据类型:

  • arr.astype(指定类型名称):转换数组的数据类型
  • 注意:①如果将浮点数转换为小数,则小数部分被截断;全部是数字的字符串数组也可以转换为数值形式 ②调用此方法生成原数组的拷贝而不是修改原数组

三、索引和切片:

  • 对数组进行索引和切片得到的是视图,所有对结果进行修改会影响原数组;若想得到副本可通过arr.copy()
  • 二维数组的axis=0表示竖直方向,axis=1表示水平方向,且arr[0][2]和arr[0,2]等效
  • 理解:arr[A,B,C...]中,对索引可理解为每隔一个逗号表示降一维。逗号前面的A表示在已选数组的范围内降一维寻找,逗号后面的B表示在已选数组A内再降一维寻找,其中A,B,C...可为数字、切片;而当他们表示数组时变成花式索引,是这个理解的例外。详见第五点

四、布尔数组索引:

  • 布尔数组可作为索引获取True位置对应的值,并将这些值重新生成一个数组

五、花式索引:

  • 注意:二维数组a[[0,2],[1,3]]表示获取索引为(0,1),(2,3)的元素,而不是获取行数为0,2,列数为1,3的矩形区域
  • 若想获取矩形区域,有两种方法:①arr[[0,2]][:,[1,3]] ②使用np.ix_函数:arr[np.ix_([0,2],[1,3])]

六、数组转置:

  • arr.T

七、通用函数:

  • 一元ufunc:

  • 二元ufunc:

八、将条件逻辑表述为数组运算:

  • 三元表达式x if condition else y可用numpy.where(condition,x,y)代替,表示condition为一个布尔数组,在True的位置用x对应位置填充,在False的位置用y对应位置填充,其中x,y可为数组或者标量,若为数组,shape必须与condition相同

九、统计方法:

  • 既可以当作数组的实例方法调用,也可以当作顶级numpy函数使用

  • 在统计方法中,布尔值会被强制转为1和0,因此可以用sum来统计布尔数组中True的个数

十、用于布尔数组的方法:

  • any用于测试数组中是否存在True,all用于测试数组中是否全是True,两个方法返回值为True/False(不指定axis按整个数组计算,axis=0沿列计算,axis=1沿行计算)
  • 在非布尔数组中,则非0元素视为True

十一、排序:

  • 修改原数组的排序:arr.sort(axis)
  • 不修改原数组的排序:np.sort(arr)

十二、唯一化:

  • np.unique(arr)找出数组中的唯一值并返回已排序的结果

十三、数组重塑:

  • arr.reshape(形状元组):将一维数组转换为多维数组,作为参数形状的某一维可以为-1,表示该维度大小由数据本身推断
  • arr.flatten()/arr.ravel():将多维数组转换为一维数组,前者返回副本,后者返回视图

十四、合并和拆分:

  • np.concatenate([arr1,arr2],axis):axis=0时沿竖直方向合并,axis=1时沿水平方向合并
  • np.vstack((arr1,arr2)),np.r_[arr1,arr2]相当于np.concatenate([arr1,arr2],axis=0)
  • np.hstack((arr1,arr2)),np.c_[arr1,arr2]相当于np.concatenate([arr1,arr2],axis=1)
  • np.split(arr,要拆分的位置)可拆分数组

十五、重复:

  • arr.repeat():传入一个整数,则各元素都会重复那么多次;传入一组整数,则各元素按对应位置重复不同次数;可以通过axis指定重复方向
  • np.tile(arr):若第二个参数传入的是一个整数,则理解为水平重复次数;若传入的是一个元组,则表示以第一个参数为单位的布局

十六、广播:

  • 规则 1: 如果两个数组的维度数不相同,那么小维度数组的形状将会在最左边补1。

  • 规则 2: 如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度 为 1 的维度扩展以匹配另外一个数组的形状。

  • 规则 3: 如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于 1, 那么会引发异常。