算法开发中常用的numpy接口

举报
鲤鱼君 发表于 2021/04/21 17:42:07 2021/04/21
【摘要】 算法开发中常用的numpy接口 1.1numpy.random.randint用法函数的作用是,返回一个随机整型数,范围从低(包括)到高(不包括),即[low, high)。如果没有写参数high的值,则返回[0,low)的值。numpy.random.randint(low, high=None, size=None, dtype='l') 参数如下:参数描述low: int生成的数值最...

算法开发中常用的numpy接口

1.1numpy.random.randint用法

函数的作用是,返回一个随机整型数,范围从低(包括)到高(不包括),即[low, high)。如果没有写参数high的值,则返回[0,low)的值。

numpy.random.randint(low, high=None, size=None, dtype='l')

参数如下:

参数 描述
low: int 生成的数值最低要大于等于low,(hign = None时,生成的数值要在[0, low)区间内)
high: int (可选) 如果使用这个值,则生成的数值在[low, high)区间。
size: int or tuple of ints(可选) 输出随机数的尺寸,比如size=(m * n* k)则输出同规模即m * n* k个随机数。默认是None的,仅仅返回满足要求的单一随机数。
dtype: dtype(可选): 想要输出的格式。如int64、int等等

例子

>>> np.random.randint(2, size=10)
array([1, 0, 0, 0, 1, 1, 0, 0, 1, 0])
>>> np.random.randint(1, size=10)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
>>> np.random.randint(5, size=(2, 4))
array([[4, 0, 2, 1],
       [3, 2, 2, 0]])
>>>np.random.randint(2, high=10, size=(2,3))
array([[6, 8, 7],
       [2, 5, 2]])
>>>np.random.randint(2, high=10, size=5)
array([5, 7, 6, 8, 2])

1.2 np.random.uniform()用法

函数的作用是,从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high。

numpy.random.uniform(low=0.0, high=1.0, size=None)

参数如下:

参数 描述
low: int 生成的数值最低要大于等于low,(hign = None时,生成的数值要在[0, low)区间内)
high: int (可选) 如果使用这个值,则生成的数值在[low, high)区间。
size: int or tuple of ints(可选) 输出随机数的尺寸,比如size=(m * n* k)则输出同规模即m * n* k个随机数。默认是None的,仅仅返回满足要求的单一随机数,缺省时输出1个。

返回值:ndarray类型,其形状和参数size中描述一致。

例子

>>> np.random.uniform(2, size=10)
array([1.09824812, 1.21176714, 1.73153916, 1.77298371, 1.74035922,
       1.8196807 , 1.40493068, 1.12837201, 1.04410412, 1.64609293])
>>> np.random.uniform(1, size=10)
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
>>>np.random.uniform(5, size=(2, 4))
array([[4.91234292, 1.3373276 , 3.67705868, 4.57696334],
       [2.97497741, 2.02671974, 4.84739057, 3.31015042]])
>>>np.random.uniform(2, high=10, size=(2,3))
array([[7.81724014, 7.61410341, 5.97951721],
       [5.19541973, 3.85842642, 7.01193338]])
>>>np.random.uniform(size=(2,3))
array([[0.96194373, 0.64629627, 0.4804901 ],
       [0.90651757, 0.06203873, 0.81082049]])
>>>np.random.uniform()
0.48280643780259824

1.3 np.argmax()用法

函数的作用是,返回沿轴axis最大值的索引。

numpy.argmax(a, axis=None, out=None)

参数如下:

参数 描述
a: array_like 数组
axis:int, optional 默认情况下,索引的是平铺的数组,否则沿指定的轴。
out:array, optional 如果提供,结果会以合适的形状和类型被插入到此数组中。

返回值:ndarray of ints索引数组,它具有与a.shape相同的形状,其中axis被移除。

例子

>>>a = np.arange(6).reshape(2,3) + 10
>>>a
array([[10, 11, 12],
       [13, 14, 15]])
>>>np.argmax(a) # 没有参数时,是默认将数组展平
5
>>>np.argmax(a, axis=0) # 0代表按列当axis=0,是在列中比较,选出最大的行索引
array([1, 1, 1], dtype=int64)
>>>np.argmax(a, axis=1) # 1代表按行axis=1,是在行中比较,选出最大的列 索引
array([2, 2], dtype=int64)
>>>np.argmax(a, axis=-1)
array([2, 2], dtype=int64)
"""这个时候,我们发现,axis=-1,和axis=1返回的结果是一样的
主要原因是axis这个参数类似列表,你可以正着来,你也倒着来。
在二维数组中,最后一位(axis=1)和(axis=-1)是一样的。
在一维数组中,最后一位(也是第一位)axis=0和axis=-1是一样的,有兴趣可以返回去验证一下。
"""

1.4 np.bincount()

函数的作用是,计算非负整数数组中每个值的出现次数。箱子的数量(大小为1)比x中的最大值大一个。如果指定了minlength,则输出数组中至少会有这个数量的箱子(但根据x的内容,必要时会更长)。每个箱子给出其索引值在x中出现的次数。如果指定了权重,则输入数组将由它进行加权

numpy.bincount(x, weights=None, minlength=0)

参数如下:

参数 描述
a : 1-D array_like 输入数组,当sorter参数为None的时候,a必须为升序数组;否则,sorter不能为空,存放a中元素的index,用于反映a数组的升序排列方式。
v : array_like 插入a数组的值,可以为单个元素,list或者array
side : {‘left’, ‘right’},optional 查询方向:当为left时,将返回第一个符合条件的元素下标;当为right时,将返回最后一个符合条件的元素下标,如果没有符合的元素,将返回0或者N(a的长度)
sorter : 1-D array_like, optional 存放a数组元素的index,index对应元素为升序。

返回值:ndarray of ints索引数组,它具有与a.shape相同的形状,其中axis被移除。

例子

# 我们可以看到x中最大的数为7,因此bin的数量为8,那么它的索引值为0->7
x = np.array([0, 1, 1, 3, 2, 1, 7])
[0 1 1 3 2 1 7]
[1 3 1 1 0 0 0 1]
# 索引0出现了1次,索引1出现了3次......索引4,5,6出现了0次7出现一次
np.bincount(x)
#因此,输出结果为:array([1, 3, 1, 1, 0, 0, 0, 1])

# 我们可以看到x中最大的数为7,因此bin的数量为8,那么它的索引值为0->7
x = np.array([7, 6, 2, 1, 4])
# 索引0出现了0次,索引1出现了1次......索引5出现了0次......
np.bincount(x)
#输出结果为:array([0, 1, 1, 0, 1, 0, 1, 1])

如果weights参数被指定,那么x会被它加权,也就是说,如果值n发现在位置i,那么out[n] += weight[i]而不是out[n] += 1.**因此,我们weights的大小必须与x相同,否则报错。**下面,我举个例子让大家更好的理解一下:

w = np.array([0.3, 0.5, 0.2, 0.7, 1., -0.6])
# 我们可以看到x中最大的数为4,因此bin的数量为5,那么它的索引值为0->4
x = np.array([2, 1, 3, 4, 4, 3])
[2 1 3 4 4 3]
[ 0.3  0.5  0.2  0.7  1.  -0.6]
[ 0.   0.5  0.3 -0.4  1.7]
np.bincount(x,  weights=w)
# 因此,输出结果为:array([ 0. ,  0.5,  0.3, -0.4,  1.7])

如果minlength被指定,那么输出数组中bin的数量至少为它指定的数(如果必要的话,bin的数量会更大,这取决于x)。下面,我举个例子让大家更好的理解一下

# 我们可以看到x中最大的数为3,因此bin的数量为4,那么它的索引值为0->3
x = np.array([3, 2, 1, 3, 1])
# 本来bin的数量为4,现在我们指定了参数为7,因此现在bin的数量为7,所以现在它的索引值为0->6
[3 2 1 3 1]
[0 2 1 2 0 0 0]
np.bincount(x, minlength=7)
# 因此,输出结果为:array([0, 2, 1, 2, 0, 0, 0])

# 我们可以看到x中最大的数为3,因此bin的数量为4,那么它的索引值为0->3
x = np.array([3, 2, 1, 3, 1])
# 本来bin的数量为4,现在我们指定了参数为1,那么它指定的数量小于原本的数量,因此这个参数失去了作用,索引值还是0->3
np.bincount(x, minlength=1)
# 因此,输出结果为:array([0, 2, 1, 2])

1.5 np.where()

函数的作用是,只有条件 (condition),没有x和y,则输出满足条件 (即非0) 元素的坐标。这里的坐标以tuple的形式给出

np.where(condition)

参数如下:

参数 描述
condition 进行选择的条件

返回值:返回索引,这里的坐标以tuple的形式给出

例子

>>> a = np.array([2,4,6,8,10])
>>> np.where(a > 5)				# 返回索引
(array([2, 3, 4], dtype=int64),)   
>>> np.where(a > 5)[0] 			
[2 3 4]

1.6 np.searchsorted()

函数的作用是,在数组a中插入数组v(并不执行插入操作),返回一个下标列表,这个列表指明了v中对应元素应该插入在a中那个位置上

numpy.searchsorted(a, v, side='left', sorter=None)

参数如下:

参数 描述
a : 1-D array_like 输入数组,当sorter参数为None的时候,a必须为升序数组;否则,sorter不能为空,存放a中元素的index,用于反映a数组的升序排列方式。
v : array_like 插入a数组的值,可以为单个元素,list或者array
side : {‘left’, ‘right’},optional 查询方向:当为left时,将返回第一个符合条件的元素下标;当为right时,将返回最后一个符合条件的元素下标,如果没有符合的元素,将返回0或者N(a的长度)
sorter : 1-D array_like, optional 存放a数组元素的index,index对应元素为升序。

返回值:ndarray of ints索引数组,它具有与a.shape相同的形状,其中axis被移除。

例子

>>>a = np.array([0,1,5,9,11,18,26,33])
>>>a
array([ 0,  1,  5,  9, 11, 18, 26, 33])
>>>np.searchsorted(a, 15)  # result1 = 5, 默认side为left 
5
>>>np.searchsorted(a, 15, side='left') 
5
>>>np.searchsorted(a, 15, side='right') 
5
>>>np.searchsorted([1,2,3,4,5], 3)
2
>>>np.searchsorted([1,2,3,4,5], 3, side='right')
3
"""searchsorted side的默认模式为left
这组实验说明:
1)如果搜索的元素存在于数组a中,left方式和right方式的返回值是不同的
2)对于left,返回的是与这个元素相等的元素的位置
3)对于right,返回的是与这个元素相等的元素的下一个位置
"""

1.7 np.average()

函数的作用是,表示加权平均

numpy.average(a, axis=None, weights=None, returned=False)

参数如下:

参数 描述
a:array_like 要计算平均值的数组
axis:None or int or tuple of ints, optional 轴,默认值,Axis=None,将计算所有元素。
weights:array_like, optional avg = sum(a * weights) / sum(weights)

返回值:返回索引,这里的坐标以tuple的形式给出

例子

>>> a = np.array([2,4,6,8,10])
>>> np.where(a > 5)				# 返回索引
(array([2, 3, 4], dtype=int64),)   
>>> np.where(a > 5)[0] 			
[2 3 4]
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。