Numpy常用函数

本文记录Numpy常用函数,个人应用场景为图像处理、深度学习、计算机视觉

目录

np.expand_dims

np.squeeze

np.nonzero

np.where

np.tile

np.minimum

np.concatenate 

np.stack 

 np.linspace

np.argsort 

 np.random.choice


  • np.expand_dims

numpy.expand_dims(aaxis)

扩展array的形状,插入一个新轴,该轴将出现在展开的数组形状中的轴位置。

参数:

a:输入array

axis:int型或者元组(里面的元素也都是int型),新轴要放的位置

返回一个array

例子:

 

官方文档: 

numpy.expand_dims — NumPy v1.23 Manual

我们也可以用x = x[:,None]来升维:

比如我们有两个数组a=[1,2,3]以及b=[2,3,4],现在我们想求\sum_{i}\sum_{j} (a[i]*b[j]),我们可以这么做:

 注意到我们的关键步骤是a = a[:,None]来升维,再利用广播机制求得我们想要的a*b再求和

  • np.squeeze

与np.expand_dims作用相反,用来降维,具体就不多作介绍,详见官方文档:

numpy.squeeze — NumPy v1.23 Manual

  • np.nonzero

numpy.nonzero(a)

参数:

a:输入array

返回返回包含非零元素下标的元组,对于a的每一个维度,输出包含该维度中非零元素的索引

示例:

虽然可以使用 a[nonzero(a)] 获得非零值,但建议使用 x[x.astype(bool)] 或 x[x != 0] 代替,这将正确处理 0-d 数组。

 一个常用的做法是配合布尔判断式使用返回满足判断式的元素下标:

 使用下面方法进行取得下标对应的值(第二种更好用):

 总结:该函数可用来返回非零元素的下标(二维的输入,返回二维的坐标),并且可以配合布尔判断式使用。

官方文档链接:

numpy.nonzero — NumPy v1.24.dev0 Manual

  • np.where

numpy.where(condition, [xy, ]/)

参数:

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

官方文档链接: 

numpy.where — NumPy v1.24.dev0 Manual

  • 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]])

 官方文档链接:

numpy.tile — NumPy v1.24.dev0 Manual

  • np.minimum

numpy.minimum(x1x2/out=None*where=Truecasting='same_kind'order='K'dtype=Nonesubok=True[, signatureextobj]) = <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((a1a2...)axis=0out=Nonedtype=Nonecasting="same_kind")

作用:将一系列array按给定的axis进行拼接(注意和np.stack的区别,np.stack可以按新给的维度进行拼接!)

参数:

(a1,a2,..):一系列array

axis:要按哪个轴进行拼接

例子:

官方链接:

numpy.concatenate — NumPy v1.23 Manual

  • np.stack 

具体用法与torch.stack一样,参见我的文章Pytorch常用函数_王大队长的博客-CSDN博客_pytorch中的函数

官方文档链接:

numpy.stack — NumPy v1.23 Manual

  •  np.linspace

numpy.linspace(startstopnum=50endpoint=Trueretstep=Falsedtype=Noneaxis=0)

参数:

start:生成序列的起始点

stop:生成序列的终点

用来生成均匀步长[start, stop)的序列,默认不包含stop,在endpoint设置为True时包含stop

例子:

 官方文档链接:

numpy.linspace — NumPy v1.23 Manual

  • np.argsort 

numpy.argsort(aaxis=- 1kind=Noneorder=None)

返回将对数组进行排序的索引。

参数:

a:要排序的数组

axis:沿哪条轴排序,默认值为-1(最后一根轴),如果为None,则将用展平的array

kind:排序算法(默认为快速排序)

返回一个数组存着排序后的下标。

例子:

 

官方文档链接:

numpy.argsort — NumPy v1.24.dev0 Manual

  •  np.random.choice

从给定的一维数组生成随机样本!

random.choice(asize=Nonereplace=Truep=None)

参数:

a:int型或一维的array

size:输出的形状,为int或int型的元组,如果给定的形状是,例如,(m, n, k),则绘制 m * n * k 个样本。默认为无,在这种情况下返回单个值。

replace:有放回采样还是无放回采样,bool型

p:一维的array,与 a 中的每个条目相关联的概率。如果未给出,则样本假定在 a 中的所有条目上均匀分布。

例子:以NLP的一个例子为例

 官方文档链接:

numpy.squeeze — NumPy v1.23 Manual


待更新...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值