Numpy中的广播(Broadcast)讲解简单易懂,困扰已久,终于想通了

简单,清晰,一定能懂

  • 先简单谈谈什么是Numpy,就是Python中核心的科学计算包,提供高维的数组和一些工具。
  • 每次遇到广播都无法判断是否可以进行广播。想了良久,最后直接看官方文档,还是讲的简单明了。
  • 然后我们先做一步工作,至关重要,把两个数组的维度以一下形式写出或在脑海想出。也就是靠右对齐。
A      (3d array): 256 x 256 x 3
B      (1d array):             3
Result (3d array): 256 x 256 x 3

A      (4d array):  8 x 1 x 6 x 1
B      (3d array):      7 x 1 x 5
Result (4d array):  8 x 7 x 6 x 5

A      (2d array):  5 x 4
B      (1d array):      1
Result (2d array):  5 x 4

A      (2d array):  5 x 4
B      (1d array):      4
Result (2d array):  5 x 4

A      (3d array):  15 x 3 x 5
B      (3d array):  15 x 1 x 5
Result (3d array):  15 x 3 x 5

A      (3d array):  15 x 3 x 5
B      (2d array):       3 x 5
Result (3d array):  15 x 3 x 5

A      (3d array):  15 x 3 x 5
B      (2d array):       3 x 1
Result (3d array):  15 x 3 x 5
我们看这个例子,对齐后从右开始的第一列,
是A对应是5和B对应是1,其中一个为1,然后第二列是3和3,所以可以进行广播。
  • 只需遵循两条规则:1、对应位置上数字相同,或2、其中有一个数为1。在上面的例子中,我结合一个进行讲解应该就懂了,否则不能够进行广播。
  • 给出不能广播的例子,也结合例子讲解一个:
A      (1d array):  3
B      (1d array):  4 # trailing dimensions do not match
我们直接可以发现第一列3和4不同,所以不能广播

A      (2d array):      2 x 1
B      (3d array):  8 x 4 x 3 # second from last dimensions mismatched
从右开始第一列,是A对应为1和B对应为3,是符合条件的,但是第二列A对应为2,但是B对应为4,它们中没有一个1,同时两者没有匹配。所以不能广播。
posted @ 2020-03-23 22:36  睿晞  阅读(1121)  评论(0编辑  收藏  举报