Numpy中常用函数np.clip和np.finfo

NumPy(Numerical Python)是Python科学计算的核心库之一,提供了高性能的多维数组对象(ndarray)以及用于数组操作的各种函数和工具。

np.finfo

finfo函数是根据括号中的类型来获得信息,获得符合这个类型的数型
一般和eps一起,eps是取非负的最小值。当计算的IOU为0或为负时,使用np.finfo(np.float32).eps来替换

"""
np.finfo使用方法
    eps是一个很小的非负数
    除法的分母不能为0的,不然会直接跳出显示错误。
    使用eps将可能出现的零用eps来替换,这样不会报错。
"""
import numpy as np
 
x = np.array([1, 2, 3], dtype=float)
eps = np.finfo(x.dtype).eps  # eps = 2.220446049250313e-16 type = <class 'numpy.float64'>
print(eps, type(eps))
height = np.array([0, 2, 3], dtype=float)
height = np.maximum(height, eps) #一旦height中出现0,就用eps进行替换
print(height)   #[2.22044605e-16 2.00000000e+00 3.00000000e+00]
dy = x / height
print(dy)   #[4.50359963e+15 1.00000000e+00 1.00000000e+00]

np.clip

在NumPy中,我们可以使用np.clip函数来对数组进行截取,即将数组中的元素限制在一个给定的范围内。即其中的元素被限制在[a_min, a_max]的范围内。

np.clip(a, a_min, a_max, out=None)

a:需要进行截取操作的数组。
a_min:截取范围的最小值。
a_max:截取范围的最大值。
out:可选参数,指定输出的存储位置。

情况1:

import numpy as np
x=np.array([1,2,3,5,6,7,8,9])
np.clip(x,3,8)#限制在3<x<8
Out[88]:
array([3, 3, 3, 5, 6, 7, 8, 8])

也就是说clip这个函数将将数组中的元素限制在a_min, a_max之间,大于a_max的就使得它等于 a_max,小于a_min,的就使得它等于a_min。

情况2:
高维数组也是一样的:

x=np.array([[1,2,3,5,6,7,8,9],[1,2,3,5,6,7,8,9]])
np.clip(x,3,8)

Out[90]:
array([[3, 3, 3, 5, 6, 7, 8, 8],
       [3, 3, 3, 5, 6, 7, 8, 8]])

情况3:
指定输出的存储位置:

import numpy as np

a = np.array([1, 2, 3, 4, 5])
b = np.zeros_like(a)
np.clip(a, 2, 4, out=b)
print(a)
print(b)

out:
[1 2 3 4 5]
[2 2 3 4 4]

情况4
但是我发现,a_min, a_max也可以为None

a = np.random.randint(1,10,10)# 随机来1-10以内的10个数

输出a:
Out[17]: array([9, 9, 8, 4, 8, 6, 6, 9, 4, 1])

b = np.clip(a,2,None)#a_min限制在2,最大值不限

输出b:
Out[19]: array([9, 9, 8, 4, 8, 6, 6, 9, 4, 2])

c = np.clip(a,None,7)#a_max限制在7,最小值不限

输出c:
Out[21]: array([7, 7, 7, 4, 7, 6, 6, 7, 4, 1])
  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值