numpy中的几个函数
这篇文章想介绍几个numpy中非常有用的函数,但知道的人可能相对少点。当你想实现某个函数的时候,你应该先看看numpy中有没有这个函数,大多数情况下,它会给你惊喜。numpy非常强大,甚至有不少人直接用它来做机器学习、深度学习模块的构建。好了,直接进入正题。
where
where函数可以返回满足你给的条件的所有元素下标,注意这里是下标。例如:
>>> import numpy as np
>>> a = np.random.randn(5)
>>> a
array([2.06039817, 1.17909182, 1.994335 , 1.43290041, 1.70352769])
>>> np.where(a > 1.8)
(array([0, 2]),)
>>> np.where(a > 1.8, 'gt18', 'lt18')
array(['gt18', 'lt18', 'gt18', 'lt18', 'lt18'], dtype='|S4')
>>>
上例生成了5个随机数,然后np.where(a > 1.8)返回了所有满足条件大于1.8的元素下标,分别是第0个和第2个。
还可以给where加两个参数,这两个参数分别是满足条件后会把元素替换成的对象和不满足条件时会把元素替换成的对象。例子里面只有第0个和第2个元素满足条件,所以会把数组第0、2个元素替换成gt18,其他的都是lt18。
argmin、argmax、argsort
这几个函数我相信做过机器学习的人大部分都用过,使用起来也比较简单,argmin返回最小元素下标(如果有若干个,返回最小的),argmax返回最大元素下标(如果有若干个,返回最大的),argsort返回排序后元素的下标。例如:
>>> a
array([2.06039817, 1.17909182, 1.994335 , 1.43290041, 1.70352769])
>>> a.argmax()
0
>>> a.argmin()
1
>>> a.argsort()
array([1, 3, 4, 2, 0])
>>> (-a).argsort()
array([0, 2, 4, 3, 1])
>>>
这里argsort如果想要逆序的话,给个-a即可。
intersect1d
这个函数返回两个数组里面的共同的元素,就是交集。它不像上面的函数,它是直接返回元素,例如:
>>> arr1 = np.array([1,2,3,4,5])
>>> arr2 = np.array([3,4,5,6,7])
>>> np.intersect1d(arr1, arr2)
array([3, 4, 5])
>>>
allclose
这个函数理解起来相对麻烦点,它的目标其实就是检测两个数组的相似度,如果两个数组里面的每个元素都满足相似性计算条件,那么返回True,如果有一个不满足,就返回False,条件就是:
numpy.allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)
absolute(a - b) <= (atol + rtol * absolute(b))
注意这里的计算公式并不是对称的,也就是说allclose(a,b)并不一定等于allclose(b,a)。
>>> arr1 = np.array([1.,2.,3.,4.,5.])
>>> arr2 = np.array([1.1,2.1,3.1,4.1,5.2])
>>> np.allclose(arr1, arr2, 0.1)
True
>>> np.allclose(arr1, arr2, 0.05)
False
bincount
这个函数计算返回数组里面所有元素下标出现的次数,注意这里是下标出现次数,所以数组必须是非负int型。它还有几个参数,这里不做探讨咯。
>>> np.bincount(np.arange(5))
array([1, 1, 1, 1, 1])
>>> np.bincount(np.array([0, 1, 1, 3, 2, 1, 7]))
array([1, 3, 1, 1, 0, 0, 0, 1])
>>>
好了,举个例子,猜猜这段函数是干啥的:

好吧,其实我只是为了凑个封面图。