zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    PAT 1020 月饼 (25)(精简版代码+思路+推荐测试用例)
    PAT 1010 一元多项式求导 (25)(STL-map+思路)
    通过无线连接的方式来做 Appium 自动化
    Eclipse shift + ctrl + F 不好用
    Appium 出现 > error: com.test/.activity1 never started. Current: com.test/.activity2
    Appium 出现 > error: com.test/.activity1 never started. Current: com.test/.activity2
    从CSDN 来到博客园入驻——2015/1/28
    敏捷自动化测试(1)—— 我们的测试为什么不够敏捷?
    敏捷自动化测试(2)——像用户使用软件一样享受自动化测试
    Android自动化测试之Monkey工具
  • 原文地址:https://www.cnblogs.com/lotuslaw/p/14094436.html
Copyright © 2011-2022 走看看