本文记录Numpy常用函数,个人应用场景为图像处理、深度学习、计算机视觉
目录
-
np.expand_dims
numpy.expand_dims(a, axis)
扩展array的形状,插入一个新轴,该轴将出现在展开的数组形状中的轴位置。
参数:
a:输入array
axis:int型或者元组(里面的元素也都是int型),新轴要放的位置
返回一个array
例子:
官方文档:
我们也可以用x = x[:,None]来升维:
比如我们有两个数组a=[1,2,3]以及b=[2,3,4],现在我们想求,我们可以这么做:
注意到我们的关键步骤是a = a[:,None]来升维,再利用广播机制求得我们想要的a*b再求和
-
np.squeeze
与np.expand_dims作用相反,用来降维,具体就不多作介绍,详见官方文档:
-
np.nonzero
numpy.nonzero(a)
参数:
a:输入array
返回返回包含非零元素下标的元组,对于a的每一个维度,输出包含该维度中非零元素的索引
示例:
虽然可以使用 a[nonzero(a)] 获得非零值,但建议使用 x[x.astype(bool)] 或 x[x != 0] 代替,这将正确处理 0-d 数组。
一个常用的做法是配合布尔判断式使用返回满足判断式的元素下标:
使用下面方法进行取得下标对应的值(第二种更好用):
总结:该函数可用来返回非零元素的下标(二维的输入,返回二维的坐标),并且可以配合布尔判断式使用。
官方文档链接:
-
np.where
numpy.where(condition, [x, y, ]/)
参数:
condition:条件
返回:如果为condition为True,则产生x,否则产生y。
注:当参数仅为condition时,就完全与使用布尔表达式的np.nonzero一致了
如我们可以用bp.where生成一个分段函数:
def weight(t):
a = -1
w = np.zeros_like(t)
at = np.abs(t)
ind = np.where(at<=1)
w[ind] = ((a+2)*(at**3) - (a+3)*(at**2) + 1)[ind]
ind = np.where((at>1)&(at<=2))
w[ind] = (a*(at**2) - 5*a*(at**2) + 8*a*at - 4*a)[ind]
return w
官方文档链接:
-
np.tile
numpy. tile ( A, reps )该函数把数组沿各个方向复制,复制的方向取决于reps
当reps仅为一个数:沿着原方向复制且不升维
当reps 为一个数组,如 a = np.array([0,1,2]), np.tile(a,(2,1))就是把a先沿x轴复制2倍(这里的x轴和y轴个人记作图像中的x轴和y轴,即x轴朝下,y轴朝右), 再把结果沿y方向复制1倍,即没有复制,仍然是 [0,1,2],即最终得到
array([[0,1,2],
[0,1,2]])
官方文档链接:
-
np.minimum
numpy.minimum(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = <ufunc 'minimum'>
比较两个数组并返回一个包含元素最小值的新数组。如果要比较的元素之一是 NaN,则返回该元素。如果两个元素都是 NaN,则返回第一个。后一种区别对于复数 NaN 很重要,复数 NaN 被定义为实部或虚部中的至少一个是 NaN。最终效果是传播了 NaN。
参数:
x1,x2:要比较的两个数组(两个数组的形状必须相同或者能够广播成相同的形状)
out:将结果存放到自己定义的out数组(可选)
注:当 x1 和 x2 都不是 NaN 时,np.minimum相当于 np.where(x1 <= x2, x1, x2),但它更快并且可以进行正确的广播。
示例:
-
np.concatenate
numpy.concatenate((a1, a2, ...), axis=0, out=None, dtype=None, casting="same_kind")
作用:将一系列array按给定的axis进行拼接(注意和np.stack的区别,np.stack可以按新给的维度进行拼接!)
参数:
(a1,a2,..):一系列array
axis:要按哪个轴进行拼接
例子:
官方链接:
-
np.stack
具体用法与torch.stack一样,参见我的文章Pytorch常用函数_王大队长的博客-CSDN博客_pytorch中的函数
官方文档链接:
-
np.linspace
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
参数:
start:生成序列的起始点
stop:生成序列的终点
用来生成均匀步长[start, stop)的序列,默认不包含stop,在endpoint设置为True时包含stop
例子:
官方文档链接:
-
np.argsort
numpy.argsort(a, axis=- 1, kind=None, order=None)
返回将对数组进行排序的索引。
参数:
a:要排序的数组
axis:沿哪条轴排序,默认值为-1(最后一根轴),如果为None,则将用展平的array
kind:排序算法(默认为快速排序)
返回一个数组存着排序后的下标。
例子:
官方文档链接:
-
np.random.choice
从给定的一维数组生成随机样本!
random.choice(a, size=None, replace=True, p=None)
参数:
a:int型或一维的array
size:输出的形状,为int或int型的元组,如果给定的形状是,例如,(m, n, k),则绘制 m * n * k 个样本。默认为无,在这种情况下返回单个值。
replace:有放回采样还是无放回采样,bool型
p:一维的array,与 a 中的每个条目相关联的概率。如果未给出,则样本假定在 a 中的所有条目上均匀分布。
例子:以NLP的一个例子为例
官方文档链接:
待更新...