机器学习(课堂笔记)Day02:Jupter、numpy、matplotlib

目录

0x00 Jupyter NoteBook 快捷键整理

0x01 Jupyter NoteBook 魔法命令

0x02 numpy 数据基础

#从python的list开始说起:

0x03  创建Numpy数组(和矩阵)

#zero

#ones full

#arange

#linspace

#random

0x04 Numpy数组(和矩阵)的基本操作

#Numpy 数组(矩阵)的基本属性

#Numpy的数据访问

#Reshap

0x05 Numpy数组(和矩阵)的合并与分割

#合并操作

#分割操作

0x06 Numpy中的矩阵运算

#Universal Function

#矩阵运算

向量和矩阵的运算

矩阵的逆

0x07 聚合操作

0x08 Numpy中的arg运算

0x09 Fancy Indexing

0x0A numpy.array比较

0x0B matplotlib 基础

#绘制曲线图

#绘制散点图

#数据加载 和 简单的数据探

 


0x00 Jupyter NoteBook 快捷键整理

ctrl+回车 运行

option +回车 运行当前单元格的代码 并且添加一个单元格

shift + 回车 运行当前单元的代码 并 聚焦到下个单元格

b 在当前选中的单元格的下面添加单元格

a 在当前选中的单元格的上面添加单元格

m 转化为文档单元格

y 转化为代码单元格

0x01 Jupyter NoteBook 魔法命令

%run py脚本所在的路径(绝对路径 or 相对路径)

运行py脚本(不仅仅是运行脚本,而是在脚本的代码 加载到了 JupterNoteBook 创建的页面进程中,也就说假如你在py脚本中定义了一个函数,那么你可以下面的单元格中直接调用这个函数)

%timeit  单条python语句

用于测试代码的性能

例如:

%timeit print("hello world")

jupter notebook会将该语句执行1000次,然后取平均值 (具体测试多少次,是由jupter notebook自己决定的)

%%timeit

一段代码

测试一段代码的性能

如果不希望系统测试多次,只希望系统测试一次,可以使用

%time python语句

%%time 

python 一段代码

查询其他魔法命令

%lsmagic
%魔法命令? 查看魔法命令的文档

0x02 numpy 数据基础

import numpy 

print(numpy.__version__) #查看版本号

#从python的list开始说起:

python的list 中元素类型可以是任意类型,并且不同类型的元素可以混合在一个数组中,这就导致了list的效率的比较低

我们可以使用array这个库 来限定数组的类型,从而提高效率

上图中 'i' 限定了数组的类型必须是 int 类型

由于array 和list 只是将数组中元素作为数组来看待,而不会当成矩阵来看待,更没有配备矩阵运算的工具,所以numpy就应运而生了

numpy

如果将5.1这个小数复制给arr[0] 那么会进行一次隐式类型转化,将5.1 转化为5

0x03  创建Numpy数组(和矩阵)

#zero

numpy.zeros() 创建全0矩阵

numpy.zeros((行数,列数))  等价于 numpy.zeros(shape=(行数,列数))

#ones full

numpy.ones() 创建全1 矩阵

numpy.full() 创建指定值矩阵

#arange

numpy.arange(起始,终止,步长) 参数意义和 python中range参数的意义完全相同 ,前闭后开区间

但是python中range的步长不能为浮点数,numpy.arange的步长却可以

#linspace

numpy.linspace(0,20,10) 从0到20之间等长的截取10个点,包括0和20

这10个数 构成了一个等差数列

#random

numpy.random.randint(0,10) 生成一个0到10之间的随机数 (前闭后开区间,取不到10)

numpy.random.randint(0,10,11) 生成一个含有11个元素的(行)列向量  (向量的元素值为0到10之间的随机数)

最后一个形参名为size,如果size传入一个元组(行数,列数),就会生成一个二维的随机矩阵

numpy.random生成随机数其实是伪随机数,因此我们可以通过numpy.random.seed() 指定随机数种子

只要随机数种子相同,生成的随机数就相同,numpy.random.randint只是在自己不断变化随机数种子而已

函数名+? 查看函数文档

模块名?查看模块文档

help(函数名) 查看函数文档

0x04 Numpy数组(和矩阵)的基本操作

#Numpy 数组(矩阵)的基本属性

.ndim  维度

.size 个数

.shape 行列

#Numpy的数据访问

切片:

对矩阵的切片:

两个方块这种索引方式是错误:

numpy中的切片和 python原生数组的切片有所不同:

python原生数组 的切片 是按值引用,即拷贝了一份值,修改切片中数据不会修改原来的数组的数据

#Reshap

0x05 Numpy数组(和矩阵)的合并与分割

#合并操作

一维数组的合并操作

二维矩阵的合并操作:

注意:二维矩阵只能和二维矩阵合并,二维矩阵 如果要和 行(列)向量合并,需要先将 行(列)向量 reshape为二维矩阵

vstack 和 hstack方法可以自动实现 数据维度的转换

#分割操作

一维数组的分割

二维矩阵的分割

快捷分割操作:

0x06 Numpy中的矩阵运算

给定一个向量,让向量找那个每一个数乘以2

a = (0,1,2)

a*2 = (0,2,4)

原生python 如何实现呢?

这样做的效率如何呢?

numpy 直接支持矩阵运算

#Universal Function

#矩阵运算

向量和矩阵的运算

numpy 在 处理 低维度量 和 高维度量 之间的运算时,通常采取这样的策略:

低维度量 与 高维度量中的包含的每个 同维度量 做运算

矩阵的逆

显而易见,并不是所有的矩阵都有逆矩阵,至少这个矩阵得是一个方阵(跟进一步该方阵的行列式的值不能为0),但是numpy 提供一种求 伪逆矩阵的方法

伪逆矩阵 * 原矩阵 近似等于 E

0x07 聚合操作

聚合操作:将一组值变成一个值

一维数组的聚合运算:

二维矩阵的聚合运算:

平均值的缺点:对一些 和样本整体差距非常大的点 非常的敏感

相反中位数则没有这么敏感,有时可以更好的描述样本

0x08 Numpy中的arg运算

排序和使用索引

矩阵的排序

0x09 Fancy Indexing

0x0A numpy.array比较

同样对于二维矩阵:

因为x[ 布尔数组 ] 是合法的

所以我们可以直接写 x[x<5] 来获取 小于5的数构成的 数组

0x0B matplotlib 基础

#绘制曲线图

linestyle可以指定线条的样式

':' ................

'-.' ———-———-———-

'--': -----------------

'-':———————————

plt.xlim(-5,15) 可以修改x轴的范围 为 (-5,15)

plt.ylim(0,1.5) 修改y轴的范围为(0,1.5)

plt.axis([x轴的最小值,x轴的最大值,y轴的最小值,y轴的最大值])

plt.xlabel("x轴的标签")

plt.ylabel("y轴的标签")

plt.title(“Welcome to the ML World”) 给图添加标题

#绘制散点图

#数据加载 和 简单的数据探索

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值