目录
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”) 给图添加标题