python01-numpy相关

🌟 numpy

Numpy 是 Numerical Python 的简称,是Python中高性能科学计算和数据分析的基础包。 Numpy 提供了一个 多维数组类型 ndarray, 具有矢量计算、复杂广播能力,可实现 快速的计算并且能节省存储空间。在使用Python调用飞桨API完成深度学习任务的过程中,通常会使用Numpy实现数据预处理和一些模型指标的计算,飞桨中的Tensor数据可以很方便的和ndarray数组进行相互转换。

🌙 1.基础数据结构ndarray数组

  • 1.1为什么引入ndarray数组?
    在 python 中使用list列表可以很灵活的处理多个元素的操作,但是效率较低。ndarray数组相较 python中list有以下特点:

    • 速度快:ndarray 数组中所有元素的 数据类型 是相同的,数据地址 是连续的,批量操作 数组元素时速度更快; list列表中元素的数据类型可以不同,需要通过寻址方式找到下一个元素。
    • 广播:ndarray数组中实现了比较成熟的广播机制,矩阵计算时不需要写 for 循环。
    • Numpy 底层用C语言编写的,内置了并行计算功能,运行速度高于 纯 python 代码。
  • 1.2如何创建ndarray数组?

    • 从list列表创建
      a = [1, 2, 3, 4, 5]
      b = np.array(a)
      
    • 指定起止范围及间隔创建 [start, end)
      a = np.arange(0, 4, 2)      # array([0, 2])
      
    • 创建全为0的ndarray数组
      a = np.zeros([2, 2])        # [[0, 0],[0, 0]]
      
    • 创建全为1的ndarray数组
      a = np.ones([2, 2])         # [[1, 1], [1, 1]]
      
    • empty创建空矩阵:a_empty = np.empty((3,4))
    • eye创建单位矩阵:a_eye = np.eye(3)
    • 查看 ndarray数组 的属性: shape、dtype、元素个数、维度ndim等。
      * 数组的数据类型: ndarray.dtype
      * 数组的形状: ndarray.shape  1维数组(N, ),二维数组(M, N),三维数组(M, N, K)  
      * 数组的维度大小: ndarray.ndim, 其大小等于 nadarray.shape 所包含元素的个数
      * 数组中包含的元素个数: ndarray.size, 其大小等于各个维度的长度的乘积  
      
      a = np.ones([3, 3])
      a.dtype     # float64   
      a.shape     # (3, 3)
      a.ndim      # 3
      a.size      # 9
      
    • 改变 ndarray 数组的数据类型和形状
      # 转换数据类型
      b = a.astype(np.int64)      
      
      # 改变形状  
      c = a.reshape([1, 9])       # [3, 3]
      
  • 1.3ndarray数组的基本运算

    • 标量和 ndarray数组之间的运算
      # 1)标量除以数组,用标量除以数组的每一个元素 
      arr = np.array([[1, 2, 3], [4, 5, 6]])
      1. / arr       # array([[1, 0.5, ...],[]])
      
      # 2)标量乘以数组,用标量乘以数组的每一个元素
      # 3)标量加上数组,用标量加上数组的每一个元素
      # 4)标量减去数组,用标量减去数组的每一个元素
      
    • 两个 ndarray 数组之间的计算
      # 数组 减去 数组, 用对应位置的元素相减
      # 数组 加上 数组, 用对应位置的元素相加
      # 数组 乘以 数组,用对应位置的元素相乘
      # 数组 除以 数组,用对应位置的元素相除
      # 数组开根号,将每个位置的元素都开根号
      
  • 常用矩阵函数

    • 矩阵的合并可以通过numpy中的 np.hstack 方法和 np.vstack 方法实现
    • np.sin(a): 对矩阵a中每个元素取正弦,sin(x)
    • np.cos(a) 对矩阵a中每个元素取余弦,cos(x)
    • np.tan(a) 对矩阵a中每个元素取正切,tan(x)
    • np.arcsin(a) 对矩阵a中每个元素取反正弦,arcsin(x)
    • np.arccos(a) 对矩阵a中每个元素取反余弦,arccos(x)
    • np.arctan(a) 对矩阵a中每个元素取反正切,arctan(x)
    • np.exp(a) 对矩阵a中每个元素取指数函数,ex
    • np.sqrt(a) 对矩阵a中每个元素开根号√x
    • 矩阵的逆: import numpy.linalg as lg, lg.inv(a)
  • 阵乘法(点乘):矩阵乘法必须满足矩阵乘法的条件,即第一个矩阵的列数等于第二个矩阵的行数

  • 1.4ndarray数组的切片和索引

    # 将一个标量值赋值给一个切片时,该值会自动传播到整个选区
    # 数组切片是原始数组的视图。这意味着数据不会被复制,
    # 视图上的任何修改都会直接反映到源数组上
    
    # 通过copy给新数组创建不同的内存空间
    a = np.arange(30)
    arr_slice = a[4:7]
    arr_slice = np.copy(arr_slice)  #自己给自己拷贝
    arr_slice[0] = 100
    a, arr_slice        a 不变, arr_slice变化
    
    索引同 paddle
    data[:2][:2]    != data[:2, :2]
    
  • 1.5ndarray数组的统计运算

    • mean 均值: array.mean() np.mean(x)
    • std 标准差: array.std() np.std(x)
    • var 方差: array.var() np.var(x)
    • sum 求和: array.sum() np.sum(x)
    • 累积和: a.cumsum(axis=0)
    • max 最大值: arrar.max(axis=)/np.max(arr, axis=)
    • 最大值索引: array.argmax(axis=...)
    • min 最小值: array.min(axis=)
    • 最小值索引: array.argmin(axis=...)
    • 中位数: np.median(x,axis=0)

🌙 2.随机数numpy.random

  • 2.1创建随机ndarray数组

    • 生成均匀分布随机数,随机数取值范围在[0, 1)之间
      a = np.random.rand(3, 3)
      
    • 生成均匀分布随机数,指定随机数取值范围和数组形状
      a = np.random.uniform(low= -1.0, high= 1.0, size= (2, 2))
      
    • 生成标准正态分布随机数
      a = np.random.randn(3, 3)       # shape指定不能用 tuple/list
      
    • 生成正太分布随机数,指定均值mean 和方差 scale
      a = np.random.normal(loc=1.0, scale=1.0, size=(3,3))
      
  • 2.2设置随机数种子

    np.random.seed(10)  #设置随机数种子,每次都产生同样的随机数
    
  • 2.3随机打乱顺序

    np.random.shuffle(a)
    随机打乱1维数组顺序时,发现所有元素位置都改变了;
    随机打乱二维数组顺序时,发现只有行的顺序被打乱了,列的顺序保持不变
    
  • 2.4随机选取元素

    # 随机选取一部分元素 
    a = np.arange(30)
    b = np.random.choice(a, size= 50)   # size如果大于30,则有重复的数字
    

python基础整理

numpy

1. ndarry 介绍: 矢量计算、复杂广播、快速省空间

在这里插入图片描述

2. ndarray 创建

2.1 np.array(a)

2.2 np.zeros([10,10])

2.2 np.ones([10,10])

2.2 np.arange(0, 10, 2)

在这里插入图片描述

2.3 随机数

2.3.1 随机数种子设定:np.random.seed()

2.3.2 均匀分布: np.random.rand() / .uniform() / .randint()

2.3.3 正态分布: np.random.normal() / .randn()

在这里插入图片描述

2.3.4 随机数shuffle: np.random.shuffle()

在这里插入图片描述

3. ndarray 查看数组类型变量的属性b.size/.shape/.ndim/.dtype

在这里插入图片描述

4. ndarry 索引和切片: 和python list不同,是原始数组的视图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. adarry 数学、统计方法

在这里插入图片描述
axis=n, 就是把其他维度都固定住,在当前维度n进行进一步计算。
在这里插入图片描述
在这里插入图片描述

6. 线性代数相关函数:求 矩阵乘法、秩、矩阵分解、特征值

在这里插入图片描述

  • 面好多方法不能直接调用
    在这里插入图片描述

7. 文件操作: 文本文件独取/二进制文件保存/二进制文件读取

在这里插入图片描述

8. numpy 应用

8.1 sigmod、relu实现

在这里插入图片描述

8.2 图像翻转、裁剪、亮度调整、下采样

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.3 作业

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

posted @ 2021-05-06 13:31  自私的人  阅读(182)  评论(0编辑  收藏  举报