本文针对:
【语义分割】评价指标:PA、CPA、MPA、IoU、MIoU详细总结和代码实现(零基础从入门到精通系列!)中实现评价指标代码里相关函数进行补充说明,包括:np.sum()、np.nansun()、np.nanmean()、np.diag()、np.bincount()
numpy中sum函数常用参数:
sum(a, axis=None...)
列和压缩行,行和压缩列
例子:
>>> np.sum([0.5, 1.5])
2.0
>>> np.sum([[1, 3], [5, 6]]) # axis = None
15
>>> np.sum([[1, 3], [5, 6]], axis = 0) # axis = 0
array([6, 9])
>>> np.sum([[1, 3], [5, 6]], axis = 1) # axis = 1
array([ 4, 11])
在上述例子中:
Q:NaN是什么?
A:Not a Number(NaN),代表一个“不是数字”的值,这个指不能直接进行运算,但它却是一个Number类型!
参考链接:
NaN 是什么?它的类型是什么?如何可靠地测试一个值是否等于 NaN ?)
在一个numpy数组求和、均值时,如果这个数组里包含了nan,则程序会报错或者求出来的值是nan,如下代码所示:
>>> arr = np.array([1, 2, 3, 4, np.nan])
>>> arr.sum()
nan
>>> arr.mean()
nan
如何在求和、均值时忽略nan?
使用:np.nansum()、np.nanmean()
>>> arr = np.array([1, 2, 3, 4, np.nan])
>>> arr.sum()
nan
>>> arr.mean()
nan
>>> np.nansum(arr) # np.nansum()中:nan取值为 0
10.0
>>> np.nanmean(arr) # np.nanmean()中:nan取值为0且取均值时忽略它,如:(1 + 2 + 3 + 4) / 4 = 2.5,而不是(1 + 2 + 3 + 4 + 0) / 5 = 2
2.5
>>>
可用于处理:数组、矩阵等
np.diag(arr)
>>> arr1 = np.arange(1, 4)
>>> arr2 = np.arange(1, 10).reshape(3, 3)
>>> arr1
array([1, 2, 3])
>>> arr2
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> np.diag(arr1)
array([[1, 0, 0],
[0, 2, 0],
[0, 0, 3]])
>>> np.diag(arr2)
array([1, 5, 9])
参考:numpy.bincount详解
参考:Python 中 (&,|)和(and,or)之间的区别