机器学习:Jupyter Notebook中numpy的使用

本文详细介绍了如何在Jupyter Notebook中使用numpy进行数据处理,包括魔法命令、numpy.array的创建、访问、合并与分割、运算等操作。重点讲解了数组的创建、随机数生成、向量与矩阵的运算以及聚合运算,为机器学习中的数据预处理提供了清晰的指导。
摘要由CSDN通过智能技术生成

一、Jupyter Notebook的魔法命令

 # 模块/方法 + ?或者help(模块/方法):查看模块/方法的解释文档;

 1)%run

 # 机械学习中主要应用两个魔法命令:%run、%timeit

 # 魔法命令格式:% + 命令

 # %run:将模块引用并在Jupyter Notebook中执行(这是与import的区别),模块被引用后,其内部的函数可以在Jupyter Notebook中直接被引用;

 # 格式:%run + 文件的地址 + 文件名

 

 2)%timeit
  1. 测试代码的性能,后面只能接一条语句/代码块,得出运行此条语句或代码块所用的时间;
  2. %timeit + 一条语句:测试该条语句运行所用时间;
  3. %%timeit:表示测试在该单元格内的全部代码运行时所用时间;
  4. %timeit、%%timeit,一般是将代码运行多遍,然后去取执行最快的几次的平均值;
  5. 如果%timeit和%%timeit后面的代码,每次运行的效率不同,则测量的结果又偏差;
  6. %time,返回只将代码运行一遍所用时间;但这样的测试结果不稳定,每次测得结果差异很大,但对于一次测试用时较长的代码/算法,测试差异可以忽略;

 

 3)其它
  • 命令 + ?:查看命令的文档;
  • 可以通过%lsmagic查看素有的魔法命令;
  • 机器学习算法中,scikit-learn中的函数封装的都是接收一个Numpy的矩阵,通常使用Pandas对数据进行预处理,将Pandas数据转换为Numpy的矩阵,再送给机械学习的算法;

 

二、numpy.array基础

 1)numpy.array的基础
  1. python的list数据非常灵活,运行效率较低,因为系统需要检测其中所有数据的类型;
  2. Python中的array模块,可以限定只存储一种数据类型:
import array
arr = array.array('i', [i for i in range(10)])
# 其中'i'表示数据类型为整数
print(type(arr[5]))
# 5
arr[5] = 'a'
# 报错,arr内的数据只能赋值为整数
  1. Python的array模块缺陷:1)中没有将数据看成向量或矩阵,因此也没有向量和矩阵相关的运算;2)只有一种数据类型,不够灵活使用;
  2. numpy模块的array方法,可以进行向量和矩阵的运算;
  3. numpy模块的array方法创建的数据,只能是整数,若将小数赋值给array方法创建的数据时,会自动转换为整数;
  4. 机械学习中所操作的大多数数值为浮点数;

 

 2)np.array的创建
  A、创建全0数组
  1. np.zeros(10):默认为float64类型的一维全0数组;
    array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
  2. np.zeros(10, dtype = int):数据类型为int的一维全0数组;
    array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
  3. np.zeros((3, 5)):默认fioat64类型的3行5列的矩阵;
    array([[0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0.],
           [0., 0., 0., 0., 0.]])
  4. np.zeros(shape = (3, 5), dtype = int)或者np.zeros( dtype = int, shape = (3, 5)):类型为int的3行5列的矩阵;
    array([[0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0]])
  
  B、创建全1的数组
  • np.ones(),操作方法同理全0矩阵的创建;
  
  C、创建所有值都相同的数组
  1. np.full((3, 5), 666)或者np.full(shape = (3, 5), fill_value = 666)或者np.full(fill_value = 666, shape = (3, 5)):默认为int;
    array([[666, 666, 666, 666, 666],
           [666, 666, 666, 666, 666],
           [666, 666, 666, 666, 666]])
  2. np.full(10, 666)或者np.full(shape = 10, fill_value = 666)或者np.full(fill_value = 666, shape = 10):
    array([666, 666, 666, 666, 666, 666, 666, 666, 666, 666])
  
  D、numpy中arange的用法:参数的用法与python中range的参数用法一样
  1. np.arange(0, 10):默认步长为1;
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  2. np.arange(10):默认起始值为0,默认步长为1;
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
  3. np.arange(0, 10, 2):取值间隔为2;
    array([0, 2, 4, 6, 8])
  4. np.arange(0, 1, 0.2):步长可以为小数,0.2,而python中的range的参数,步长不能为小数;
    rray([0. , 0.2, 0.4, 0.6, 0.8])
  5. range()生成列表,np.arange()生成数组;
    
  E、numpy中linspace的用法,与arange类似
  • np.linspace(0, 20, 10):将0~20间的数等分10个点,首尾分别是0和20,此处10不是步长,而是将区间等分的点数(包含首尾数值);
    array([ 0.        ,  2.22222222,  4.44444444,  6.66666667,  8.88888889,
           11.11111111, 13.33333333, 15.55555556, 17.77777778, 20.        ])
  
  F、numpy中random的用法:生产随机int数random.randint()
  • 区间为前闭后开:[m,n);
  • 随机生成的数据给算法时,运行的结果不一致,导致调试困难;
  • 计算机中,所有的随机数都是伪随机数,都是随机算法实现的;推动算法生产随机数的是随机种子:同一个随机种子生产的随机数是一定的,再次调用该种子时可以得到上一次该种子生产的随机数;
  1. np.random.randint(0, 10):从0~10间随机生产一个z
    5
  2. np.random.randint(0, 10, 5):从0~10间随机生成5个int类型的数;
    array([8, 6, 3, 3, 6])
  3. np.random.randint(4, 8, size = 10):一般标出size = 10,提高代码可读性;
    array([6, 5, 6, 7, 4, 7, 7, 6, 5, 5])
  4. np.random.randint(4, 8, size = (3, 5)):从[4, 8)中,随机生成3行5列的矩阵;
    array([[7, 7, 5, 5, 5],
           [5, 7, 5, 7, 4],
           [6, 6, 4, 6, 5]])
  5. 随机种子的使用
    # Jupyter Notebook中实现的代码
    np.random.seed(666)
    np.random.randint(4, 8, size = (3, 5))
    # 设定随机种子,并生成随机数据
    np.random.seed(666)
    np.random.randint(4, 8, size = (3, 5))
    # 再次调用该种子,并再次生成原来格式的随机数据,所得到的数据与第一次随机生成的数据相同;

 

  G、numpy中random的使用:生成随机float数random.random()
  • 生成的float数为0~1的随机数
  • random.random()的操作格式与random.randint()一样;
    
  H、numpy中random的使用:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值