cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
在学习图像识别的规范化过程中,我看到很多人使用此代码。我知道这句话是用来规范混淆矩阵的,这样它只包含0到1之间的数字。这样,正确分类样本的百分比就可以从矩阵中读取。我的数学不太好,但我想知道这个句子是如何运作的。如果有人能帮我,我会很感激的!
n53p2ov01#
它沿着一个轴(轴1)找到一个和,然后沿着该轴广播除以和的相应值。所以假设你有:
>>> arr = np.arange(4*5).reshape(4, 5) >>> arr array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]])
首先,它沿着轴求和:
>>> arr.sum(1) array([10, 35, 60, 85])
注意,不能用当前形状广播这两个数组:
>>> arr / arr.sum(1) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: operands could not be broadcast together with shapes (4,5) (4,)
尾随轴必须为1,因此您可以添加一个新轴,其结果形状为(4,1):
>>> arr.sum(1)[:, np.newaxis] array([[10], [35], [60], [85]]) >>> arr.sum(1)[:, np.newaxis].shape (4, 1)
现在,广播部门的工作是:
>>> arr array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]) >>> arr.sum(1)[:, np.newaxis] array([[10], [35], [60], [85]]) >>> arr / arr.sum(1)[:, np.newaxis] array([[0. , 0.1 , 0.2 , 0.3 , 0.4 ], [0.14285714, 0.17142857, 0.2 , 0.22857143, 0.25714286], [0.16666667, 0.18333333, 0.2 , 0.21666667, 0.23333333], [0.17647059, 0.18823529, 0.2 , 0.21176471, 0.22352941]])
阅读有关broadcasting in the numpy docs的更多信息
1条答案
按热度按时间n53p2ov01#
它沿着一个轴(轴1)找到一个和,然后沿着该轴广播除以和的相应值。
所以假设你有:
首先,它沿着轴求和:
注意,不能用当前形状广播这两个数组:
尾随轴必须为1,因此您可以添加一个新轴,其结果形状为(4,1):
现在,广播部门的工作是:
阅读有关broadcasting in the numpy docs的更多信息