2-Anaconda简介&Numpy基础

Anaconda使用

  • 为什么使用 Anaconda
    • 缺点
      • 文件比较大
    • 优点
      • 包非常齐全, 一般不会出现问题.
      • 虚拟环境不会重新安装包,而是使用已有包的链接
  • conda常用命令
    • 进入cmd
      • conda create -n env1 python=3.6
        • 创建python3.6的env1虚拟环境
    • conda activate xxxx
      • 开启xxxx环境
    • conda deactivate
      • 关闭环境
    • conda env list
      • 显示所有的虚拟环境
    • conda remove -n xxxx --all
      • 删除虚拟环境
    • conda list
      • 查看已经安装的文件包
    • conda uninstall xxx
      • 卸载xxx文件包

Numpy基础

  • 导入numpy库

    • # 数据分析“三剑客”
      import numpy as np
      import pandas as pd
      import matplotlib.pyplot as plt
      
  • 创建ndarray

    • 使用np.array()由python list创建

    • numpy默认ndarray的所有元素的类型是相同的

      • 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int
        • n = np.array(['hello', 1, 2, 3.14])
    • 使用np的routines函数创建

      • np.ones(shape, dtype=None, order='C')
        • n = np.ones(5)
          • 创建一个所有元素都为1的多维数组
        • n = np.ones((3, 4), dtype=np.int)
          • 整数,3行4列
      • np.zeros(shape, dtype=float, order='C')
        • n = np.zeros((5, 6), dtype=int)
          • 创建全为0的数组
      • np.full(shape, fill_value, dtype=None, order='C')
        • n = np.full((3, 4), 8)
        • 创建用指定元素填充的数组
      • np.eye(N, M=None, k=0, dtype=float)
        • np.eye(6, 6, dtype=int)
          • 单位阵
        • n = np.eye(5, 5, dtype=int, k=2)
          • k表示偏移
            • 对角线的1向右边移动两个位置
            • k=-2对角线的1向左边移动两个位置
      • np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
        • n = np.linspace(0, 100, 50, dtype=float, endpoint=True, retstep=True)
          • 创建一个等差数列
          • 保留结束点,显示步长
      • np.arange([start, ]stop, [step, ]dtype=None)
        • n = np.arange(6)
        • 和python的range类似,作用是取一个范围
        • n = np.arange(2, 10, 2)
          • array([2, 4, 6, 8])
      • np.random.randint(low, high=None, size=None, dtype='l')
        • n = np.random.randint(1, 3)
          • 随机的整数, 范围是:[1, 3)
        • n = np.random.randint(1, 10, size=(3, 4, 5))
          • 3维,总共3*4*5个随机数
        • n = np.random.randint(0, 256, size=(6, 8, 3))
          • plt.imshow(n)
          • 创建一个随机图: 三维
      • 操作图片
        • cat = plt.imread('cat.jpg')
        • cat.shape # 形状:4567303
        • plt.imshow(cat)
      • np.random.randn(d0, d1, ..., dn)
        • 标准正太分布
        • n = np.random.randn(10)
          • array([ 2.25358397, 1.04323284, 0.2821671 , -1.31587675, -0.93080649, 0.86579112, -2.13239042, 3.31663086, -0.32907992, 0.57921973])
      • np.random.normal(loc=0.0, scale=1.0, size=None)
        • 正态分布
          • n = np.random.normal(170, 5, size=(3, 4))
          • 均值,方差
      • np.random.random(size=None)
        • 生成0到1的随机数,左闭右开
          • n = np.random.random(size=(3, 4))
      • np.random.rand(3, 4)
        • 返回一个或一组服从“0~1”均匀分布的随机样本值。
  • ndarray的属性

    • n.ndim
      • 维度
    • n.shape
      • 形状(各维度的长度)
    • n.size
      • 总长度3*4*5*......
    • n.dtype
      • 元素类型
  • ndarray的基本操作

    • 索引

      • 一维
        • n[4]
      • 多维
        • n[2][2]
        • n[2, 2]
    • 切片

      • 一维
        • 与列表完全一致
        • list1[:-1]
        • list1[::-1]
      • 多维
        • n[0]
          • 获取第一行
        • n[0] = 0
          • 修改第一行
        • n[1:4]
          • 切片取连续的行
        • n[[1,3,4]]
          • 取指定的多行
        • n[:,0]
          • 获取第一列
        • n[:,[-1, 1]]
          • 获取指定的多列
        • n[:, 1:4]
          • 获取连续的多列
        • n[1:-1, 1:-1]
          • 指定的行和列
    • 翻转

      • n[::-1]
        • 行翻转
      • n[:, ::-1]
        • 列翻转
    • n.transpose()/n.T

      • 矩阵转置
      • 和n[::-1, ::-1]不一样
    • 变形

      • 使用reshape函数,注意参数是一个tuple!
      • n.reshape((4, 5))
        • n.shape=20=4*5
        • n3.reshape(20)
          • 变成1维
        • n3.reshape((20,))
          • 变成1维
        • n3.reshape((-1,))
          • 变成1维
          • 不需要考虑总数
        • cat2 = cat.reshape((-1, 3))
          • 第一维与第二维合并
        • cat3 = cat.reshape((3, -1))
          • 第二维与第三维合并
    • 级联

      • np.concatenate() 级联需要注意的点

        • 级联的参数是列表:一定要加中括号或小括号
        • 维度必须相同
        • 形状相符
        • 级联的方向默认是shape这个tuple的第一个值所代表的维度方向
        • 可通过axis参数改变级联的方向
      • display(n1, n2)

        • 同时显示多个
      • np.concatenate((n1, n2))

        • 默认上下合并
      • np.concatenate((n1, n2), axis=0)

        • 默认axis=0 表示第一个维度 垂直合并
      • np.concatenate((n1, n2), axis=1)

        • axis=1表示第二个维度 水平合并
      • np.hstack((n1, n2))

        • 水平合并/水平级联
      • np.vstack((n1, n2))

        • 垂直合并/垂直级联
      • n = np.array([[1,2,3], [4,5,6], [7,8,9]])

        • np.hstack(n)
          • 处理自己
          • array([1, 2, 3, 4, 5, 6, 7, 8, 9])
      • n = np.array([1,2,3])

        • np.vstack(n)

        • 处理自己

          • array([[1],
                   [2],
                   [3]])
            
    • 切分/拆分/分隔

      • np.vsplit(n, 4)
        • 垂直拆分,行等分成4份
      • np.vsplit(n, (1, 3, 5))
        • 垂直拆分,在指定的下标位置拆分,可以有多个拆分点
      • np.hsplit(n, 2)
        • 水平拆分,将列等分成两份
      • np.split(n, 2)
        • 默认axis=0
      • np.split(n, 2, axis=0)
        • 按第一个维度拆分,垂直拆分/上下拆分
      • np.split(n, 2 ,axis=1)
        • 按第二个维度拆分,水平拆分/左右拆分
    • 副本

      • 所有赋值运算不会为ndarray的任何元素创建副本。对赋值后的对象的操作也对原来的对象生效

      • 可使用copy()函数创建副本

      • 拷贝

        • n = np.random.randint(0, 10, size=(2, 4))
          n2 = n.copy()
          n[0,0] = 99
          display(n, n2)
          '''
          array([[99,  5,  5,  3],
                 [ 7,  5,  2,  8]])
          array([[3, 5, 5, 3],
                 [7, 5, 2, 8]])
          '''
          
  • ndarray的聚合操作

  • 求和

    • 一维
      • np.sum(n)
      • n.sum()
    • 二维
      • np.sum(n, axis=0)
        • 表示将每一列的所有行的数相加
      • np.sum(n, axis=1)
        • 表示将每一行的所有列的数相加
      • np.sum(n, axis=(0, 1))
        • 表示将指定维度的数求和
      • np.nansum(n)
        • 忽略nan
  • 最大最小值

    • np.max/ np.min
  • 平均值

    • np.mean(n)
    • np.average(n)
  • 中位数

    • np.median(n)
  • 次幂

    • np.power(n, 3)
    • n**3
  • 第一个最大数的下标

    • np.argmax(n)
    • n[np.argmax(n)] = 0
  • 第一个最小数的下标

    • np.argmin(n)
  • 找到所有的最大数的下标

    • np.argwhere(n==np.max(n)).reshape(-1)
  • 其他聚合操作

    • np.prod
    • np.std
    • np.var
    • np.min
    • np.max
    • np.percentile
      • Compute rank-based statistics of elements
    • np.any
      • Evaluate whether any elements are true
    • np.all
      • Evaluate whether all elements are true
    • 所有的聚合操作都可以剔除nan
  • ndarray的矩阵操作

    • 基本矩阵操作

      • 算术运算符

        • n + 10
        • n - 10
        • n * 10
        • n / 10
        • n % 6
        • n // 4
        • n ** 2
      • 两个数组进行运算

        • +-*/

        • 矩阵积np.dot()

          • np.dot(n1, n2)
          • 点积,矩阵乘法
        • 广播机制

          • 为缺失的维度补维度

          • 假定缺失元素用已有值填充

          • '''
            array([[0],
                   [1],       +   array([0, 1, 2])   = [0,0,0]   [0,1,2]   [0,1,2]
                   [2]])                               [1,1,1] + [0,1,2] = [1,2,3]
                                                       [2,2,2]   [0,1,2]   [2,3,4]
            '''
            
  • ndarray的排序

    • n2 = np.sort(n) # 不改变输入
      • 不改变原数组,类似于Python中的sorted
    • n.sort() # 本地处理,不占用空间,但改变输入
      • 改变原数组,类似于Python中的sort
上一篇:pytorch入门到项目(三)tensor的概念以及创建


下一篇:20210921-JavaScript-变量和函数的提前加载