关于广播机制,小编我也是入门级别的,只能把吴学阀的东西来给大家展现一下,有什么不足或者需要补充的地方,希望大家可以踊跃留言,小编必定虚心接受、改进。
⎡⎣⎢⎢⎢ apple beef eggs potatoescarb 56.0 0.0 4.4 68.0protein 1.2 104.0 52.0 8.0fat 1.8 135.0 99.0 0.9⎤⎦⎥⎥⎥
[
a
p
p
l
e
b
e
e
f
e
g
g
s
p
o
t
a
t
o
e
s
c
a
r
b
56.0
0.0
4.4
68.0
p
r
o
t
e
i
n
1.2
104.0
52.0
8.0
f
a
t
1.8
135.0
99.0
0.9
]
以上定义了一个3*4的矩阵,行、列分别代表苹果、牛肉、鸡蛋、土豆和碳水化合物、蛋白质、脂肪。我们将求碳水化合物、蛋白质、脂肪分别对四种食物所占的比重。
使用“广播”机制来进行计算将会大大的减少代码量:
cal=A.sum(axis=0) c a l = A . s u m ( a x i s = 0 )
axis代表对行或列进行操作,axis=0是对列进行操作,axis=1是对行进行操作,第五行为每列的求和值。
![](https://i-blog.csdnimg.cn/blog_migrate/b5efc0750adf8c64d988af355797c94d.png)
percentage=100∗A/(cal.reshape(1,4)) p e r c e n t a g e = 100 ∗ A / ( c a l . r e s h a p e ( 1 , 4 ) ) ,cal.reshape是将cal变为一个1*4的矩阵,事实上,在经过上一步之后,cal已经是一个矩阵,这样写是为了防止出现错误,确保进行操作的是一个1*4的矩阵。以下得到了每种属性所占每种食物的比重。
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/92de604020e960ceebfba0b5a00c45a4.png)
对于广播来说,是为了更方便的计算矩阵来设计的,给定一个m*n的矩阵对该矩阵进行加减乘除操作,而目标矩阵是1*n或m*1或为实数的矩阵,都将通过广播机制转化为与给定矩阵相同维数的矩阵.