当前位置:   article > 正文

2.15 Python 中的广播-深度学习-Stanford吴恩达教授_python 广播 深度学习

python 广播 深度学习


Python 中的广播 (Broadcasting in Python)

在这里插入图片描述

这是一个不同食物(每100g)中不同营养成分的卡路里含量表格,表格为3行4列,列表示不同的食物种类,从左至右依次为苹果,牛肉,鸡蛋,土豆。行表示不同的营养成分,从上到下依次为碳水化合物,蛋白质,脂肪。

那么,我们现在想要计算不同食物中不同营养成分中的卡路里百分比。

现在计算苹果中的碳水化合物卡路里百分比含量,首先计算苹果(100g)中三种营养成分卡路里总和56+1.2+1.8 = 59,然后用56/59 = 94.9%算出结果。

可以看出苹果中的卡路里大部分来自于碳水化合物,而牛肉则不同。

对于其他食物,计算方法类似。首先,按列求和,计算每种食物中(100g)三种营养成分总和,然后分别用不用营养成分的卡路里数量除以总和,计算百分比。

那么,能否不使用for循环完成这样的一个计算过程呢?

假设上图的表格是一个4行3列的矩阵 A A A ,记为 A 3 ∗ 4 A_{3*4} A34 ,接下来我们要使用Pythonnumpy库完成这样的计算。我们打算使用两行代码完成,第一行代码对每一列进行求和,第二行代码分别计算每种食物每种营养成分的百分比。

jupyter notebook中输入如下代码,按shift+Enter运行,输出如下。

在这里插入图片描述

下面使用如下代码计算每列的和,可以看到输出是每种食物(100g)的卡路里总和。

在这里插入图片描述

其中sum的参数axis=0表示求和运算按列执行,之后会详细解释。

接下来计算百分比,这条指令将 3 ∗ 4 3*4 34 的矩阵 A A A 除以一个 1 ∗ 4 1*4 14 的矩阵,得到了一个 3 ∗ 4 3*4 34 的结果矩阵,这个结果矩阵就是我们要求的百分比含量。

在这里插入图片描述

下面再来解释一下A.sum(axis = 0)中的参数axisaxis用来指明将要进行的运算是沿着哪个轴执行,在numpy中,0轴是垂直的,也就是列,而1轴是水平的,也就是行。

而第二个A/cal.reshape(1,4)指令则调用了numpy中的广播机制。这里使用 3 ∗ 4 3*4 34 的矩阵 A A A 除以 1 ∗ 4 1*4 14 的矩阵 c a l cal cal 。技术上来讲,其实并不需要再将矩阵 c a l cal cal reshape(重塑)成 1 ∗ 4 1*4 14 ,因为矩阵 c a l cal cal 本身已经是 1 ∗ 4 1*4 14 了。但是当我们写代码时不确定矩阵维度的时候,通常会对矩阵进行重塑来确保得到我们想要的列向量或行向量。重塑操作reshape是一个常量时间的操作,时间复杂度是 O ( 1 ) O(1) O(1),它的调用代价极低。

那么一个 3 ∗ 4 3*4 34 的矩阵是怎么和 1 ∗ 4 1*4 14 的矩阵做除法的呢?让我们来看一些更多的广播的例子。

课程PPT

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/631637
推荐阅读
相关标签
  

闽ICP备14008679号