机器学习(2)——jupyter notebook与numpy使用技巧

文章目录

    • jupyter notebook魔法命令
    • numpy使用技巧

本文是 imooc Python3入门机器学习 的学习笔记,用于整理自己学习到的概念,用以备查。

jupyter notebook魔法命令

  • %run命令
%run myscript/hello.py
#会同时把hello.py执行一遍并把其中的函数包括进当前环境。
  • %timeit
%timeit [i**2 for i in range(1000)]
#用于测试后面紧跟的一句话的运行时间,但只能跟一句话。会帮你自动执行多次。
  • %%timeit
%%timeit 
res=0
for i in range(1000):
	res+=i**2
#用于测试整个单元格的运行时间,会自动执行多次,显示整体的效果
  • %%time和%time
    同上,就不细写了,只会将后面的语句和单元格执行一次,是真正的物理时间,而非cpu时间。
  • %ls magic
    显示其他所有魔法命令,备查。
    例如想看%run命令:
%run?#即可

numpy使用技巧

基本用法

###常用用法
import numpy as np 
nparr=np.array([i for i in range(100)])

#获取类型
nparr.dtype()
#若如上创建,默认类型为int64,再添加任何数据会进行隐性类型转换

创建数组

#若不指定,默认为float类型数据
np.zeros((3,5),dtype=int)
#为1,作用同上
np.ones()
#指定具体值
np.full((3,5),666)
#三个参数分别是起始点,终止点,步长
np.arrange(1,100,2) #和列表解析是一样的
#有所不同,将指定长度离散化,分别是起点,终点,段数(多少个数字)
np.linspace(1,100,50)

random模块

#np.random.randint()和自带的普通用法取值不同,numpy中后面的数字是开区间
#取不到10这个值
np.random(0,10)
#和自带的random稍有不同,第三个参数指定个数,在创建数组时可以用上
np.random.randint(0,10,size=10)
np.random.seed(666)#指定种子
#生成矩阵,好用
np.random.randint(0,10,size=(3,5))
#生成0,1之间均匀分布的随机数
np.random.random(0,10,size=10)
#生成0,1之间正态分布的随机数
np.random.normal(0,10,size=10)
#参数不清楚时查一查,在notebook中直接查看文档
np.random.normal?#弹窗显示
help(np.random.normal)#业内显示

自定义size

#创建有序的resize矩阵
x=np.arrange(10).reshape(2,5)
#查看维度,长宽和大小
x.ndim
x.shape #返回几行几列
x.size #返回有几个元素

数据访问

x[2][2]#数组写法
x[2,2]#类matlab写法
x[::2]#步长为2访问,一维时
x[::-1]#倒序访问,一维时
x[::-1,::-1]#二维时
y=x[:2,:3].copy#获得子矩阵时防止引用

reshape操作

x=np.arrange(10)
x.reshape(1,10)#可以将一维数组变为二维矩阵
x.reshape(10,-1)#-1代表自动计算,反正要的是10行,几列不管
#上述写法,不能整除时会报错

Array拼接

np.concatenate([x,y,z])
#可以一次拼接三个数组,不用一个一个加

若是多维向量拼接,需理解为最外层元素个数的增加。

np.concatenate([x,y,z],axis=1)
#更高维度的拼接
np.concatenate([X,z.reshape(1,-1)])
#将矩阵与向量拼接,相当于list.append()

vstack和hstack

np.vstack([A,B])#水平拼接
#使用hstack时可以不reshape,直接拼接
np.hstack([A,z])#竖直拼接

分割操作

#从下标3,7将数组分割为3段
np.split([1,2,3,4,5,6,7,8,9,10],[3,7])
#同理还有vsplit和hsplit

线性计算操作

a=[1,2,3,4,5,6,7,8,9,10]

res=[2*i for i in a]#普通时使用乘法
#np中使用乘法
res=np.array(2*i for i in a)#效率比生成表达式还高
#当a是array时,完全适用于向量和矩阵的乘法
a=arange(100)
res=2*a

#类似的操作有减法,加法,abs,sin,cos,a**2,1/a,exp,pwoer(3,2=a)
#np.log(a),np.log10(a)

矩阵计算操作

#直接用*和/都是对应元素直接乘除
#故要用.dot()和np.linalg.inv(A)
A.dot(B)
np.linalg.inv(A)#求逆
np.linalg.pinv(A)#求伪逆

聚合操作

np.sum()
A.min()
A.max()
A.sum()
np.sum(A,axis=1)
np.prod(A)#所有元素的乘积
np.mean(A)#求均值
np.meida(A)#求中值
np.meida(A)#求均值
np.pencentile(A,50)#求百分位,即有50%的值都是小于这个的
np.var(A)#求方差
np.std(A)#求标准差

获取索引

#获得最小值的索引
np.argmin(A)
np.argmax(A)
#返回排序的索引
np.argsort()
#类似快排的操作,将大于3和小于3的数分开
np.partition(A,3)

fancy indexing

ind=[3,4,8]
#获取索引为3,5,8的数据
x[ind]

row=[0,1,2]
col=[1,2,3]
#获取(0,1),(1,2),(2,3)处的值
x[row,col]

#判断x中那些元素小于3
x<3
#任意一个为true,any返回true
np.any(A==3)
#必须全部为true,返回true
np.all(A>3)
#使用位运算符
np.all(A>3 & A<5 )

np.all(A>3 | A<-5 )
#使用~来表示非号,即小于等于
np.all(~(A>3))

matlplotlib

#以x,y轴为单位的散点图
plt.scatter(x,y)
#展示不透明度,可以更好看清
plt.scatter(x,y,alpha=0.1)

你可能感兴趣的:(机器学习备忘录)