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 npx = 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 npa = 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])