Numpy学习总结与梳理 ---- 参考两门课程《莫烦Python》《日月光华Python》【Numpy回顾总结】

参考课程:《莫烦Python》《日月光华Python》.

说明:该文章用于回顾、梳理,未附加足够的代码解释,素所以不适合开始入门学习。

1 Numpy的数据结构&数据类型

  1. Numpy的数据结构:仅一种:np.array
  2. Numpy的数据类型:详情见文 Numpy数据类型
  3. 数据类型的查看与转换:对象.dtype()与对象.astype()

琐碎知识点:

  1. Bool类型数据的隐式转换 True为 1 & False为 0 。bool与其他数据类型隐式转换的详细说明
  2. 对象.round()函数并不是真正的四舍五入。round函数并不是绝对的四舍五入.

2 数组对象的创建方式&属性方法调用规则

  1. Numpy的数组创建方式:np.array( list | tuple ,dtype=”指定的数据类型“) 默认浮点数类型
    zeros(元组形式的shape)----zeros((3,4))
    empty(元组形式的shape)----有时生成0值,有时生成各种随机数。
    arange(起始数字,结束数字(不可取),步幅)----返回一维数组,常搭配reshape
    random.randn(元组形式的shape)----标准正态分布随机值。
    ones() ---- 同zeros
    linspace(起始数字,结束数字(可取),段数) ---- 将数据范围平均分成几段
  2. array数组对象查看属性的方法:ndim(秩、维度)、shape、dtype、size(所有元素的个数)
  3. array数组对象的方法调用规则:由数组对象点出相应方法,或者np点出相应方法。区别于python中自带的同名方法。
    比如:array对象.sum()可行,而sum(array对象)报错
    以后还会需要pandas对象,所以保险的调用方式是:对象.方法()。
    另外,还有一个原因,有的时候,一个方法仅支持对象点出方法的形式而不支持np点出的形式;同时,有的方法仅支持np点出的方式而不支持对象点出(比如split)。
  4. 注意:(3,)和(3,1)不是同一shape的数组,前者是一维,后者是二维。
  5. 习惯上,对于二维数组,经常把第一维度称为行,第二维度称为列。

3 数组对象的基础运算&常用方法介绍

  1. 两个相同shape的数组对象的运算,如果是加减乘除,则是两个数组的对应位置元素的加减乘除,且shape保持不变。
  2. 两个不相同shape的数组且其中一个与另一个数组的某个维度值相同的对象运算,如果是加减乘除,则会使用广播处理操作。参考文章numpy中的广播机制.
  3. 如果是点乘(np.dot)则是线代中典型的矩阵相乘运算,且shape不会一成不变。
  4. 条件判断表达式,会返回一个bool的数组 ---- 常用来索引满足条件的元素 或者sum等方法统计满足条件的元素个数
  5. 除法取模( % | mod )& 取余操作(//)
  6. np.[sin | sum|min|max|mean| average|median | describe ]
  7. np.[argmin|argmax] ---- 获取最值得索引。
  8. np.[cumsum | cumprod ] ---- 累加 | 累乘 可以指定轴
  9. np.diff ---- 相邻元素的差值,如果是二维的数组在计算的轴方向上会减少一行或者一列。
  10. np.nonzero ---- 如果是二维数组,将数组对象中非0的元素的索引分别以行索引和列索引的方式返回。
  11. np.sort ---- 数据对象将按照指定的计算轴的方向进行排序,且默认升序排列,而ascending=False表示降序。
  12. np.argsort() ---- 以数组形式反映出从小到大排列的元素在原来序列中的索引值[1,4,3,6] --> [0, 2, 1, 3]
  13. np.[transpose | T ] ---- 矩阵的转置,常用于矩阵的乘法。
  14. np.clip(数组对象,最小临界数字,最大临界数字) ---- 将数字类型的数组对象中大于”最大临界数字“的数字全部重新赋值为”最大临界数字”,而小于不等于“最小临界数字”的数字全部重新赋值为“最小临界数字”。
  15. np.newaxis ---- 用以升一个维度。
  16. np.unique ---- 以列表的形式,返回一个列表对象中不相同的元素值。
  17. np.[all | any] ---- all 表示全部元素均为True才返回True,而any 表示只存在一个True时就可以返回True。
  18. “沿某一维度进行计算的方法”的通用参数:axis。且对于二维对象,axis取0还是1,记住这么一句话”0垂直方向,1水平方向“。
  19. 不能使用np点出的方法:对象.flat(返回一个生成器)& 数组对象.[flatten | ravel](返回一个含有具体元素的列表)。

琐碎知识点:

  1. 所有的方法,基本上都不会对原数据对象进行修改,以保障数据安全与避免"爆内存"。如果要直接修改原数据,需要添加inplace=True参数。
  2. newaxis升维的理解 numpy添加新的维度:newaxis的方法经常遇到的问题是:比如需要从二维数组里面抽取一列,取出来之后维度却变成了一维,假如我们需要将其还原为二维,就需要上面的方法了。
  3. axis的另一种使用理解 如何快速理解numpy中的axis:例如一个shape(3,2,4)的数组,代表一个三维数组,这时如果 :
    axis = 0时,就相当于所求的数组的结果变成shape(2,4)
    axis = 1时,数组的结果shape(3,4)
    axis = 2时,数组的结果shape(3,2)

4 Numpy选择指定数据的方式:索引&切片

  1. 单值索引 ---- 对象[单个索引值]。
  2. 多指索引 ---- 对象 [ 行索引值 ] [ 列索引值 ] & 对象[行索引值,列索引值]。
  3. 切片索引 ---- 对象[行索引值1:行索引值2:步幅**,**列索引值1:列索引值2:步幅] & 对象[行索引值1:行索引值2:步幅]
  4. bool式条件索引 ---- 对象[条件1&条件2…] 这种方式使用频率还是非常高的,且常搭配 ~ ,即对象[~(条件1&条件2…)] ,以实现取反!

琐碎知识点:

  1. 切片[索引值1:索引值2:步幅] 的正负索引值与正负步幅的理解。切片中正负索引值和正负步幅的理解.
  2. bool式条件索引。Numpy中bool式条件索引

5 Numpy数组的合并:垂直合并&水平合并

  1. np.vstack([ 数组对象1,数组对象2 ]) ---- 垂直合并,hstack ---- 左右合并。
  2. np.concatenate([数组对象列表],axis) ---- 在指定的轴方向上进行数据连接,且注意涉及到指定轴方向的方法计算,最好先测试一下计算效果。

6 Numpy数组的分割:均等分割&非均等分割

  1. np.split(数组对象,分割份数,指定轴方向)
  2. np.array_split(数组对象,分割份数,指定轴方向)
  3. np.vsplit(数组对象,分割份数) ---- 垂直方向;np.hsplit(数组对象,分割份数) ---- 水平方向。

7 Numpy的浅拷贝和深度拷贝

  1. 平时的赋值操作都是浅拷贝;深拷贝需要在赋值操作的基础上添加copy方法。即a1 = a2.copy()
  2. 判断两个变量的引用对象是否一致(即浅拷贝)的方式:通过is来判断两个变量的ID,a1 is a2

8 Numpy的随机数

  1. np.random.normal() ---- 默认情况下返回一个标准正态分布的随机值。
  2. np.random.randn((3,4)) ---- 在指定shape的情况下,返回一个标准正态分布的随机值。
  3. np.random.randint(1,10,(3,4)) ---- 返回一个shape为(3,4)的元素值在[ 1,10) 左闭右开区间的随机值。
  4. np.random.choice(list) ---- 返回list序列中其中的任意一个元素。
  5. np.random.permutation(list) ---- 将list中的元素的位置顺序随机打乱,常见的用法是对于二维数组含多列的数据集,先将样本的索引顺序打乱,以实现对样本顺序的打乱。index = np.random.permutation(len(a)) --> a[index] .
  6. np.random.seed(12) ----> 产生原因是为了重复某项实验,而其一旦被调用,它的影响效力仅仅限于下面的第一个出现的random语句。

琐碎知识点:

  1. np.random.normal的使用 np.random.normal()函数的默认值的推演.
  2. np.random.seed()的理解与使用 np.random.seed()的理解及使用.
  3. np.where语句的理解与使用numpy.where() 用法详解.

9 Numpy的逻辑运算

  1. 仅将where(Bool序列,序列1,序列2)---- 三个序列的长度必须一致,另外,如果对应位置的bool值是True则选择序列1中的相应元素,如果是False,则选择序列2中的相应元素。

10 Numpy的数据存取

  1. 默认的扩展名是,npy
  2. np.save(“file_name”, variable_name) ---- 保存某个Numpy变量,且file_name不需要提供扩展名。
  3. np.load(“file_name.npy”) ---- 加载npy文件。、
a = np.arange(6)
np.save("lesson10",a) 
b = np.load("lesson10.npy")
b

#############    输出内容  #################
array([0, 1, 2, 3, 4, 5])

==================== T H E E N D! ====================

猜你喜欢

转载自blog.csdn.net/m0_38052500/article/details/106850069