Python中Numpy的广播机制

最易懂,最正确的广播机制

各位,来了,就千万别走,保证你会有收获

注意,本文是绝对正确的广播机制
广播的原则,就2点:

  • 数组维数不相等,但后缘维度的轴长相等
  • 有一方长度为1

只要两个原则符合一个就满足广播条件
在解释之前,先知道numpy的获取数组形状的属性,shape属性是数组的形状,类型为元组tuple

接下来,好好解释一下这两点。

  • 第一点:数组维数不相等,就是shape返回的元组的长度不相等。len(np1.shape) == len(np2.shape),相等那么维数相等,否则维数不相等,我们的原则是长度不相等。接下来是后缘维度的轴长,就是shape的最后一个或几个数字相同,如a.shape为(4, 5, 6),b.shape为(6,),维度不相等并且那么最后一个数字6相同,可以。再来,如a的shape为(3, 4, 6),b的shape为(4, 6),维数不等,后缘维度4和6相等,可以。再来,a的shape为(3, 4, 6),b的shape为(3, 6),维数不等,虽然最后一个数字相等,但是倒数第二个数字不相等,所以后缘维度的轴长不相等,且没有1(下面的第二点)不可以。
  • 第二点:有一方长度为1,这个包含2点。就是np.shape后得到的两个a, b元组中,b要么有1,要么和a的对应维度上的数字相同。如a的shape为(4, 2, 5),b的shape为(4, 1, 5),a和b中,第一个和第三个对应位置上的数字相等,而第二个b是1,符合广播原则。再来,a的shape为(3, 6, 3, 2),b的shape为(3, 6, 1, 1),第一个和第二个对应位置相等,而b的后2个为1(数量>=1),符合规则。再来,a的shape为(4, 5, 3),b的shape为(1, 1, 2),不行,第三个位置上对应数字不相等。再来,a的shape为(6, 8, 9),b的shape为(2, 3, 4),不行,对应位置不相等,且没有1。再来,如a的shape为(4, 5, 7),b的shape为(5, 1),那么第二个对应位置数字相同,有1,可以。再来,a的shape为(3, 1, 6),b的shape为(4, 6),维数不等,最后一个对应位置为6相等,且a中有1,可以。

注意上面这些例子,大家可以试一下,如:
按照这个格式去尝试不同的shape,结果都为1,那么说明正确,报错,那就错了。

import numpy as np
a = np.zeros(shapeA)
b = np.ones(shapeB)
c = a + b
print(c)
print(c.shape)

还是,只要符合2个原则中的一个就可以,如果你觉得有收获,就点个赞吧,让更多的人看到

发布了36 篇原创文章 · 获赞 20 · 访问量 2823

猜你喜欢

转载自blog.csdn.net/weixin_43360801/article/details/103464805