简单,清晰,一定能懂
- 先简单谈谈什么是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,同时两者没有匹配。所以不能广播。