python 导包 numpy_python numpy包常用函数的使用方法

1.random

我们在进行机器学习基础建模的时候,一个必不可少的问题就是参数的初始化问题,初始化是通过random包实现的,这个包已经被集成到numpy中了,我们来学习其中几个比较常用的初始化方法。

uniform

unifrom的基础用法为:np.random.uniform(low,high,size)。其中low为下界,high为上界,size为初始化矩阵的大小一般采用()形式表示,如(1,2)就是表示初始化1行2列的矩阵。

np.random.uniform(1,2,(3,4))

array([[1.01799472, 1.25821013, 1.10805296, 1.59482889],

[1.43729843, 1.14598927, 1.23277124, 1.02388416],

[1.02657724, 1.45677034, 1.10795221, 1.19952202]])

random

random是最基本的随机数产生方法,就是生成一个0-1随机数,基本用法为random(size),size决定了产生随机数的形状或个数。

np.random.random(2)

array([0.40726817, 0.69243006])

randint

randint的作用跟函数名暗示的相同,即产生一个随机的整数,基本用法为randint(low,high,size),这个函数要注意两点,一是产生的随机数范围包括high这个值,二是size省略时取1,这个也是这个函数最常用的场景。

np.random.randint(1,5,(3,5))

array([[3, 4, 3, 2, 2],

[3, 2, 4, 1, 3],

[1, 1, 2, 2, 3]])

randrange

这个函数不太常用吧,只做了解即可,它是在一定范围内随机取一个数,基本用法为randarrange(start,stop,step),这个start,step都可以省略默认为0,1。这个包和其他的包略微有点不一样,没有打包在np.random里,如果要用需要单独import random这个包。

import random

random.randrange(1, 100, 2)

shuffle

这个函数使用频率也不怎么高,用于将一个列表中的元素顺序打乱,基本用法为shuffle(x)。注意一点,np.random.shuffle(list)的返回值为none,它的作用就是对list重排,要看输出结果需要打印list。

list = [20, 16, 10, 5]

np.random.shuffle(list)

print(list)

-- 输出

[5, 10, 20, 16]

sample

sample函数是从集合中选取样本,这在机器学习算法训练的时候样本不太多时进行抽样使用,基本用法为sample(seq, n) ,他不会对原序列进行更改。严格来说这个函数不在numpy.random这个包里,要调用的话首先需要引入random这个包。

import random

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

slice = random.sample(list, 5)

print(slice)

-- 结果

[6, 3, 1, 7, 4]

2.argmax和argmin

两个函数通常用于机器学习中以概率形式输出列表中寻找最大/小值对应的下标,以确定最后的预测值。本身其实还是比较好理解的,但是对应到含有axis方向的时候,就需要注意了。函数的基本用法为argmax(array,axis=0),这个axis=0可以不写,默认为axis=0,即按列形式搜索最大值,保存的列表大小为列数,当axis=1时,即按行搜索最大值,保存的列表大小为行数。还是以案例来说明。

a = np.array([[1, 5, 5, 2],

[9, 6, 2, 8],

[3, 7, 9, 1]])

print(np.argmax(a, axis=0))

print(np.argmax(a, axis=1))

--输出

[1 2 2 1]

[1 0 2]

argmin和argmax的用法相同,只不过返回最小值对应的索引,索引是从0开始的哦。

3.log

log函数就是取对数操作,python自己不带这种计算方法,可以引进numpy包进行操作,关于log用法也很多。如果什么也不加np.log()就是以e为底,还可以以10为底,以2为底,分别是np.log10(),np.log2(),但如果相以任意数为底,np就比较麻烦了,需要公式转换,就是np.log(3)/np.log(2)代表以2为底,以3为真值的对数,如果觉得麻烦,可以直接导入math包,math.log(m,n),表示以n为底,以m为真值的对数。

np.log(8)/np.log(2)

--输出

3.0

4.inner和outer

inner和outer也是为了矩阵和数组操作而产生的函数,我们先从最基本的用法讲起。outer只接受一维数组,对于非一维数组,python会总动flatten(扩展,展开)为一维的,基本用法为outer(a,b),比如a是m维的,b是n维的,那么他们相乘是m乘n维的,计算方法是 result[i,j] = a[i] * a[j] ,看案例。看来是第一个输入决定行数,第二个输入决定猎术

a=[1,2,3]

b=[4,5,6]

np.outer(a,b)

--输出

array([[ 4, 5, 6],

[ 8, 10, 12],

[12, 15, 18]])

同理,inner()也只接受一维数组作为输入,对应位置相乘后加和,这个相当于先*,或者multiply后,再取sum值,具体怎么用,笔者暂未接触,比较难的操作也不必过于深究,如果实在想知道怎么操作,需要弄懂array的广播机制,所有问题都可以解决。

a=[1,2,3]

b=[4,5,6]

np.inner(a,b)

--输出

32

5.zeros、ones、empty

这三个函数的出场率比较高,尤其是zeros在机器学习的参数初始化中非常常见。其实使用起来比较简单,以zeros为例,np.zeros((2,3)),这个地方只要注意如果是生成多维的0变量,要用括号括起来。np.ones()和np.zeros()用法一模一样的,都是提前生成一个数组或者说矩阵然后循环往里代入数据。我们着重说一下,np.empty(),这个行数的介绍是生成一个多维的空数组,但实际上市生成的随机数,需要指定数据类型才能生成自己想要的东西,怎么说呢,np.empty的用法为,np.empty((2,2),dtype=list),这个才是空数组。我们来看案例。

np.zeros((2,3),dtype=int)

np.ones((2,3),dtype=int)

np.empty((2,3),dtype=float)

np.empty((2,3),dtype=list)

--输出

array([[0, 0, 0],

[0, 0, 0]])

array([[1, 1, 1],

[1, 1, 1]])

array([[1., 1., 1.],

[0., 0., 0.]])

array([[None, None, None],

[None, None, None]], dtype=object)

这里还有个小坑,就是如果想用empty生成的空列表时候,append方法报错,折中方法是先赋予一个空列表值,然后采用append方法,最后再把这个空列表append后的值传给empty生成的列表。这个empty还有一个坑,如果用list作为数据类型的话,他是不显示列数的,这在操作中比较麻烦,大家需要还是用dtype = int初始化吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值