【机器学习】嘿马机器学习(科学计算库)第6篇:Numpy,学习目标【附代码文档】

2024-08-26 22:36

本文主要是介绍【机器学习】嘿马机器学习(科学计算库)第6篇:Numpy,学习目标【附代码文档】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本教程的知识点为:机器学习(常用科学计算库的使用)基础定位 机器学习概述 机器学习概述 1.5 机器学习算法分类 1 监督学习 机器学习概述 1.7 Azure机器学习模型搭建实验 Azure平台简介 Matplotlib 3.2 基础绘图功能 — 以折线图为例 1 完善原始折线图 — 给图形添加辅助功能 Matplotlib 3.3 常见图形绘制 1 常见图形种类及意义 Numpy 4.2 N维数组-ndarray 1 ndarray的属性 Numpy 4.4 ndarray运算 问题 Pandas 5.1Pandas介绍 1 Pandas介绍 Pandas 5.3 基本数据操作 1 索引操作 Pandas 5.6 文件读取与存储 1 CSV Pandas 5.8 高级处理-数据离散化 1 为什么要离散化 Pandas 5.12 案例 1 需求

完整笔记资料代码->:https://gitee.com/yinuo112/AI/tree/master/机器学习/嘿马机器学习(科学计算库)/note.md

感兴趣的小伙伴可以自取哦~


全套教程部分目录:


部分文件图片:

Numpy

学习目标

  • 了解Numpy运算速度上的优势
  • 知道数组的属性,形状、类型
  • 应用Numpy实现数组的基本操作
  • 应用随机数组的创建实现正态分布应用
  • 应用Numpy实现数组的逻辑运算
  • 应用Numpy实现数组的统计运算
  • 应用Numpy实现数组之间的运算

4.2 N维数组-ndarray

学习目标

  • 目标

  • 说明数组的属性,形状、类型


1 ndarray的属性

数组属性反映了数组本身固有的信息。

属性名字属性解释
ndarray.shape数组维度的元组
ndarray.ndim数组维数
ndarray.size数组中的元素数量
ndarray.itemsize一个数组元素的长度(字节)
ndarray.dtype数组元素的类型

2 ndarray的形状

首先创建一些数组。

# 创建不同形状的数组>>> a = np.array([[1,2,3],[4,5,6]])
>>> b = np.array([1,2,3,4])
>>> c = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])

分别打印出形状

>>> a.shape
>>> b.shape
>>> c.shape(2, 3)  # 二维数组
(4,)    # 一维数组
(2, 2, 3) # 三维数组

如何理解数组的形状?

二维数组:

数组1

三维数组:

数组2

3 ndarray的类型

>>> type(score.dtype)<type 'numpy.dtype'>

dtype是numpy.dtype类型,先看看对于数组来说都有哪些类型

名称描述简写
np.bool用一个字节存储的布尔类型(True或False)'b'
np.int8一个字节大小,-128 至 127'i'
np.int16整数,-32768 至 32767'i2'
np.int32整数,-2^31​ 至 2^32 -1'i4'
np.int64整数,-2^63 至 2^63 - 1'i8'
np.uint8无符号整数,0 至 255'u'
np.uint16无符号整数,0 至 65535'u2'
np.uint32无符号整数,0 至 2^32 - 1'u4'
np.uint64无符号整数,0 至 2^64 - 1'u8'
np.float16半精度浮点数:16位,正负号1位,指数5位,精度10位'f2'
np.float32单精度浮点数:32位,正负号1位,指数8位,精度23位'f4'
np.float64双精度浮点数:64位,正负号1位,指数11位,精度52位'f8'
np.complex64复数,分别用两个32位浮点数表示实部和虚部'c8'
np.complex128复数,分别用两个64位浮点数表示实部和虚部'c16'
np.object_python对象'O'
np.string_字符串'S'
np.unicode_unicode类型'U'

创建数组的时候指定类型

>>> a = np.array([[1, 2, 3],[4, 5, 6]], dtype=np.float32)
>>> a.dtype
dtype('float32')>>> arr = np.array(['python', 'tensorflow', 'scikit-learn', 'numpy'], dtype = np.string_)
>>> arr
array([b'python', b'tensorflow', b'scikit-learn', b'numpy'], dtype='|S12')
  • 注意:若不指定,整数默认int64,小数默认float64

4 总结

数组的基本属性【知道】

属性名字属性解释
ndarray.shape数组维度的元组
ndarray.ndim数组维数
ndarray.size数组中的元素数量
ndarray.itemsize一个数组元素的长度(字节)
ndarray.dtype数组元素的类型

Numpy

学习目标

  • 了解Numpy运算速度上的优势
  • 知道数组的属性,形状、类型
  • 应用Numpy实现数组的基本操作
  • 应用随机数组的创建实现正态分布应用
  • 应用Numpy实现数组的逻辑运算
  • 应用Numpy实现数组的统计运算
  • 应用Numpy实现数组之间的运算

4.3 基本操作

学习目标

  • 目标

  • 理解数组的各种生成方法

  • 应用数组的索引机制实现数组的切片获取
  • 应用维度变换实现数组的形状改变
  • 应用类型变换实现数组类型改变
  • 应用数组的转换

1 生成数组的方法

1.1 生成0和1的数组

  • np.ones(shape, dtype)
  • np.ones_like(a, dtype)
  • np.zeros(shape, dtype)
  • np.zeros_like(a, dtype)
ones = np.ones([4,8])
ones

返回结果:

array([[1., 1., 1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1., 1., 1.],[1., 1., 1., 1., 1., 1., 1., 1.]])
np.zeros_like(ones)

返回结果:

array([[0., 0., 0., 0., 0., 0., 0., 0.],[0., 0., 0., 0., 0., 0., 0., 0.],[0., 0., 0., 0., 0., 0., 0., 0.],[0., 0., 0., 0., 0., 0., 0., 0.]])

1.2 从现有数组生成

1.2.1 生成方式
  • np.array(object, dtype)

  • np.asarray(a, dtype)

a = np.array([[1,2,3],[4,5,6]])# 从现有的数组当中创建a1 = np.array(a)# 相当于索引的形式,并没有真正的创建一个新的a2 = np.asarray(a)
1.2.2 关于array和asarray的不同

image-20190618211642426

1.3 生成固定范围的数组

1.3.1 np.linspace (start, stop, num, endpoint)
  • 创建等差数组 — 指定数量
  • 参数:

  • start:序列的起始值

  • stop:序列的终止值
  • num:要生成的等间隔样例数量,默认为50
  • endpoint:序列中是否包含stop值,默认为ture
# 生成等间隔的数组np.linspace(0, 100, 11)

返回结果:

array([  0.,  10.,  20.,  30.,  40.,  50.,  60.,  70.,  80.,  90., 100.])
1.3.2 np.arange(start,stop, step, dtype)
  • 创建等差数组 — 指定步长
  • 参数

  • step:步长,默认值为1

np.arange(10, 50, 2)

返回结果:

array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42,44, 46, 48])
1.3.3 np.logspace(start,stop, num)
  • 创建等比数列

  • 参数:

  • num:要生成的等比数列数量,默认为50

# 生成10^xnp.logspace(0, 2, 3)

返回结果:

array([  1.,  10., 100.])

1.4 生成随机数组

1.4.1 使用模块介绍
  • np.random模块
1.4.2 正态分布
一、基础概念复习:正态分布(理解)
a. 什么是正态分布

正态分布是一种概率分布。正态分布是具有两个参数μ和σ的连续型随机变量的分布,第一参数μ是服从正态分布的随机变量的均值,第二个参数σ是此随机变量的标准差,所以正态分布记作N(μ,σ )

b. 正态分布的应用

生活、生产与科学实验中很多随机变量的概率分布都可以近似地用正态分布来描述。

c. 正态分布特点

μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。

标准差如何来?

  • 方差

是在概率论和统计方差衡量一组数据时离散程度的度量

image-20190620081842007

其中M为平均值,n为数据总个数,σ 为标准差,σ ^2​可以理解一个整体为方差

标准差公式

  • 标准差与方差的意义

可以理解成数据的一个离散程度的衡量

离散程度

二、正态分布创建方式
  • np.random.randn(d0, d1, …, dn)

功能:从标准正态分布中返回一个或多个样本值

  • np.random.normal(loc=0.0, scale=1.0, size=None)

loc:float

​ 此概率分布的均值(对应着整个分布的中心centre)

scale:float

​ 此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)

size:int or tuple of ints

​ 输出的shape,默认为None,只输出一个值

  • np.random.standard_normal(size=None)

返回指定形状的标准正态分布的数组。

举例1:生成均值为1.75,标准差为1的正态分布数据,100000000个
x1 = np.random.normal(1.75, 1, 100000000)

返回结果:

array([2.90646763, 1.46737886, 2.21799024, ..., 1.56047411, 1.87969135,0.9028096 ])
# 生成均匀分布的随机数x1 = np.random.normal(1.75, 1, 100000000)# 画图看分布状况# 1)创建画布plt.figure(figsize=(20, 10), dpi=100)# 2)绘制直方图plt.hist(x1, 1000)# 3)显示图像plt.show()

例如:我们可以模拟生成一组股票的涨跌幅的数据

举例2:随机生成4支股票1周的交易日涨幅数据

4支股票,一周(5天)的涨跌幅数据,如何获取?

  • 随机生成涨跌幅在某个正态分布内,比如均值0,方差1
股票涨跌幅数据的创建
# 创建符合正态分布的4只股票5天的涨跌幅数据stock_change = np.random.normal(0, 1, (4, 5))
stock_change

返回结果:

array([[ 0.0476585 ,  0.32421568,  1.50062162,  0.48230497, -0.59998822],[-1.92160851,  2.20430374, -0.56996263, -1.44236548,  0.0165062 ],[-0.55710486, -0.18726488, -0.39972172,  0.08580347, -1.82842225],[-1.22384505, -0.33199305,  0.23308845, -1.20473702, -0.31753223]])
1.4.2 均匀分布
  • np.random.rand(d0, d1, ..., dn)

  • 返回[0.0,1.0)内的一组均匀分布的数。

  • np.random.uniform(low=0.0, high=1.0, size=None)

  • 功能:从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.
  • 参数介绍:

    • low: 采样下界,float类型,默认值为0;
    • high: 采样上界,float类型,默认值为1;
    • size: 输出样本数目,为int或元组(tuple)类型,例如,size=(m,n,k), 则输出mnk个样本,缺省时输出1个值。
  • 返回值:ndarray类型,其形状和参数size中描述一致。

  • np.random.randint(low, high=None, size=None, dtype='l')

  • 从一个均匀分布中随机采样,生成一个整数或N维整数数组,

  • 取数范围:若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。
# 生成均匀分布的随机数x2 = np.random.uniform(-1, 1, 100000000)

返回结果:

array([ 0.22411206,  0.31414671,  0.85655613, ..., -0.92972446,
0.95985223,  0.23197723])

画图看分布状况:

import matplotlib.pyplot as plt# 生成均匀分布的随机数x2 = np.random.uniform(-1, 1, 100000000)# 画图看分布状况# 1)创建画布plt.figure(figsize=(10, 10), dpi=100)# 2)绘制直方图plt.hist(x=x2, bins=1000)  # x代表要使用的数据,bins表示要划分区间数# 3)显示图像plt.show()

2 数组的索引、切片

一维、二维、三维的数组如何索引?

  • 直接进行索引,切片
  • 对象[:, :] -- 先行后列

二维数组索引方式:

  • 举例:获取第一个股票的前3个交易日的涨跌幅数据
# 二维的数组,两个维度 stock_change[0, 0:3]

返回结果:

array([-0.03862668, -1.46128096, -0.75596237])
  • 三维数组索引方式:
# 三维a1 = np.array([ [[1,2,3],[4,5,6]], [[12,3,34],[5,6,7]]])# 返回结果array([[[ 1,  2,  3],[ 4,  5,  6]],[[12,  3, 34],[ 5,  6,  7]]])# 索引、切片>>> a1[0, 0, 1]   # 输出: 2

3 形状修改

3.1 ndarray.reshape(shape, order)

  • 返回一个具有相同数据域,但shape不一样的视图
  • 行、列不进行互换
# 在转换形状的时候,一定要注意数组的元素匹配stock_change.reshape([5, 4])
stock_change.reshape([-1,10])  # 数组的形状被修改为: (2, 10), -1: 表示通过待计算

3.2 ndarray.resize(new_shape)

  • 修改数组本身的形状(需要保持元素个数前后相同)
  • 行、列不进行互换
stock_change.resize([5, 4])# 查看修改后结果stock_change.shape
(5, 4)

3.3 ndarray.T

  • 数组的转置
  • 将数组的行、列进行互换
stock_change.T.shape
(4, 5)

4 类型修改

4.1 ndarray.astype(type)

  • 返回修改了类型之后的数组
stock_change.astype(np.int32)

4.2 ndarray.tostring([order])或者ndarray.tobytes([order])

  • 构造包含数组中原始数据字节的Python字节
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[12, 3, 34], [5, 6, 7]]])
arr.tostring()

4.3 jupyter输出太大可能导致崩溃问题【了解】

如果遇到

IOPub data rate exceeded.The notebook server will temporarily stop sending outputto the client in order to avoid crashing it.To change this limit, set the config variable`--NotebookApp.iopub_data_rate_limit`.

这个问题是在jupyer当中对输出的字节数有限制,需要去修改配置文件

创建配置文件

jupyter notebook --generate-config
vi ~/.jupyter/jupyter_notebook_config.py

取消注释,多增加

## (bytes/sec) Maximum rate at which messages can be sent on iopub before they#  are limited.c.NotebookApp.iopub_data_rate_limit = 10000000

但是不建议这样去修改,jupyter输出太大会崩溃

5 数组的去重

5.1 np.unique()

temp = np.array([[1, 2, 3, 4],[3, 4, 5, 6]])
>>> np.unique(temp)
array([1, 2, 3, 4, 5, 6])

6 小结

  • 创建数组【掌握】

  • 生成0和1的数组

    • np.ones()
    • np.ones_like()
  • 从现有数组中生成

    • np.array -- 深拷贝
    • np.asarray -- 浅拷贝
  • 生成固定范围数组

    • np.linspace()

      • nun -- 生成等间隔的多少个
    • np.arange()

      • step -- 每间隔多少生成数据
    • np.logspace()

      • 生成以10的N次幂的数据
  • 生层随机数组

    • 正态分布

      • 里面需要关注的参数:均值:u, 标准差:σ

        • u -- 决定了这个图形的左右位置
        • σ -- 决定了这个图形是瘦高还是矮胖
      • np.random.randn()

      • np.random.normal(0, 1, 100)
    • 均匀

      • np.random.rand()
      • np.random.uniform(0, 1, 100)
      • np.random.randint(0, 10, 10)
  • 数组索引【知道】

  • 直接进行索引,切片

  • 对象[:, :] -- 先行后列

  • 数组形状改变【掌握】

  • 对象.reshape()

    • 没有进行行列互换,新产生一个ndarray
  • 对象.resize()

    • 没有进行行列互换,修改原来的ndarray
  • 对象.T

    • 进行了行列互换
  • 数组去重【知道】

  • np.unique(对象)

这篇关于【机器学习】嘿马机器学习(科学计算库)第6篇:Numpy,学习目标【附代码文档】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109873

相关文章

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill