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初始化吧。

你可能感兴趣的:(python numpy包常用函数的使用方法)