L1神经网络与深度学习-2.15python广播
·

问题引入:列代表四种不同的食物(苹果,牛肉,鸡蛋,土豆),行代表三种成分(Carb碳水化合物,Protein蛋白质,Fat脂肪),数值代表卡路里
问题是,请计算出,对于每种食物,不同成分所占总卡路里的百分比
要解决这个问题,首先要算出每一列的和,得到这个食物的总卡路里,然后再用食物各个成分的卡路里去除以这个食物的总卡路里
代码实现:
cal = A.sum(axis=0) #纵向求和
percentage = 100*A/(cal.reshape(1,4)) #这里cal已经是1行4列了,reshape主要起一个保险和提示作用,为了确保矩阵是我们想要的形状
A是3行4列,cal是1行4列,为什么可以正常相除呢?因为广播

从这些例子中似乎可以理解广播

广播就是在矩阵运算时,如果一个矩阵比另一个小,就会做复制
比如(m,n)与(m,1)运算,就会把(m,1)复制n列变为(m,n)的矩阵
numpy官方文档里有更详细的解释,可以理解为以下的规则,建议最好还是去找官方文档。
规则1:如果两个数组的维度不相同,那么小维度数组的形状将会在最左边补1.
规则2:如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度为1的维度拓展以匹配另外一个数组形状。
规则3:如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于1,那么会引发异常。
更多推荐
所有评论(0)