工欲善其事,必先利其器,在正式进入机器学习算法学习之前,先学习一下常用模块的基本操作。
Numpy.array与python list
导入numpy,查看版本
import numpy as np
np.__version__
#out:'1.15.4'
为什么使用numpy进行数据操作呢,首先看python list和numpy操作数据的不同:
L=[i for i in range(10)]
L
#out:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
python的list非常灵活,元素可以是不同类型,但这也限制了list的性能,每次创建还要进行类型检查。
L[3]='liangliang'
L
#out:[0, 1, 2, 'liangliang', 4, 5, 6, 7, 8, 9]
当然python原生也有限制类型的数组结构,python自带的array模块
import array
ar=array.array("i",[i for i in range(10)])
ar
#out:array('i', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
此时试图修改某元素为其它类型会出现报错。但是,它只是将数据看作数组,无法将数据看成向量和矩阵进行运算。
于是更强大的Numpy.array应运而生。
nparr=np.array([i for i in range(10)])
nparr
#out:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
nparr.dtype#查看数据类型
#out:dtype('int64')
nparr[3]=3.144
nparr
#out:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
创建numpy.array的方法
zeros,ones
zeros,ones等。默认为浮点型数据
l=np.zeros(10)
l
#out:array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
l.dtype
#out:dtype('float64')
若要创建全0整数,则指定dtype
l=np.zeros(10,dtype=int)
其实第一个参数是大小,可以传入创建矩阵
l=np.zeros(shape=(3,4))
#out:array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
若用full,则生成指定数值向量或矩阵,dtype依据fill_value而确定。
l=np.full(shape=(3,4),fill_value=10)
#out:array([[10, 10, 10, 10],
[10, 10, 10, 10],
[10, 10, 10, 10]])
注:当显式写出参数名,可以调换各个参数位置。
arange
下面以2为步长,生成0到20直间数组,range是不包含终端点的。
l=[i for i in range(0,20,2)]#python中
print('l:',l)
m=np.arange(0,20,2)
print('m:',m)
#out:
l: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
m: [ 0 2 4 6 8 10 12 14 16 18]
不同是range中步长不可以是浮点数,而numpy.arange可以是浮点步长,不指定步长则默认为1。
linspace
在0到20之间等长截11个点,是包含首尾端点的
p=np.linspace(0,20,11)
p
#out:array([ 0., 2., 4., 6., 8., 10., 12., 14., 16., 18., 20.])
random
生成(0,10)之间一个随机的整数,这种方法不包括终端点
np.random.randint(0,10)
#out:6
生成(0,10)之间的向量
np.random.randint(0,10,size=7)
#out:array([0, 3, 1, 8, 2, 9, 9])
size可以指定生成矩阵
np.random.randint(0,10,size=(2,2))
#out:
array([[9, 3],
[9, 0]])
设置随机种子可以保证生成的随机数一样,因为计算机中的随机数实际是伪随机数,是随机数生成算法生成的,于是可以设置随机种子。
np.random.seed(2)
np.random.randint(0,10,size=11)
#out:array([8, 8, 6, 2, 8, 7, 2, 1, 5, 4, 4])
np.random.seed(2)
np.random.randint(0,10,size=11)
#out:array([8, 8, 6, 2, 8, 7, 2, 1, 5, 4, 4])
这两次随机生成是一样的。
生成(0,1)之间随机数
np.random.random()
#out:0.35273532
当然可以指定生成向量或矩阵
np.random.random(size=7)
#out:array([0.13457995, 0.51357812, 0.18443987, 0.78533515, 0.85397529, 0.49423684, 0.84656149])
生成标准正太分布随机数
np.random.normal(size=(2,2))
#out:
array([[-0.63765501, -1.18761229],
[-1.42121723, -0.1534952 ]])
指定均值方差
np.random.normal(0,2,size=(2,2))
#out:
array([[-0.53811392, 4.46273358],
[-4.86953515, 0.22545301]])
要学会查阅文档,这是一项非常有用的技能。如果对一些模块或者函数参数不清楚,可以翻阅文档进行查询:
np.random.normal?
这种方式会调出窗口显示文档
//或
help(np.random.normal)
这种方式会直接在notebook中打印文档
这是一种非常标准的学习框架的方式。
有小伙伴问我指定矩阵或向量维度时什么时候用参数shape,什么时候用size,这个好像随机生成用size,其余情况用shape(不一定对)。
及其学
网友评论