广播机制的简明理解

numpy 的数组相加、相减以及相乘运算都是对应元素之间的操作,当两个数组大小完全相同的情况下很好想象。

广播的原则:如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符,或其中的一方的长度为1,则认为它们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。 

 这是后缘维度相同的情况     2*2*3       3            广播在缺失的维度进行


x = np.array([[2,2,3],[1,2,3]])
y = np.array([[1,1,3],[2,2,4]])
print(x * y)
 [[ 2  2  9]
  [2  4 12]]

x = np.array([[[10,11,12],[13,14,15]],
              [[10,11,12],[13,14,15]]])
y = np.array([1,1,1])
print(x + y)
 [[[11 12 13]
  [14 15 16]]

 [[11 12 13]
  [14 15 16]]]

这是最后一个维度长度为1      4*3    和4*1      广播在长度为1的维度上进行。 此时其他维度必须相同或者不存在。

 x = np.array([[0, 0, 0],[1, 1, 1],[2, 2, 2], [3, 3, 3]]) 
 y = np.array([[1],[2],[3],[4]])   
 print(x + y)
[[1 1 1]
 [3 3 3]
 [5 5 5]
 [7 7 7]]

x = np.array([[[0, 0, 0], [1, 1, 1]],
             [[2, 2, 2], [3, 3, 3]]])
y = np.array([[1], [1]])

[[[1 1 1]
  [2 2 2]]

 [[3 3 3]
  [4 4 4]]]

如这个:  2*2*3     和2*1  行!

                2*2*3      和4*1  不行!

对于进行广播的张量,对应的每个维度的大小要么相等,要么其中一个维度的大小为 1。如果两个张量的维度大小相等,则它们可以直接运算。如果一个维度的大小为 1,则该维度会在运算中被复制扩展为与另一个张量相同的大小。

如果两个张量的形状在某个维度之前的维度大小完全相等,而在此之后的维度大小要么相等要么为 1,那么这两个张量可以通过广播进行元素级操作。

现在看看更清晰了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值