【Python】numpy广播机制

【Python】numpy广播机制

一,简介
当两个数组的形状并不相同的时候,我们可以通过扩展数组的方法来实现相加、相减、相乘等操作,这种机制叫做广播(broadcasting)。

二,规则
网上和书上都有对规则的描述,看到最多的有以下两种
第一种:

  1. 让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。
  2. 输出数组的形状是输入数组形状的各个维度上的最大值。
  3. 如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。
  4. 当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。

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

第一种描述相对第二种就比较全面点,但是也不太好理解。结合两种描述后得到一个通俗的理解是:
1,无论两个数据维度是否相等,都将维度进行右对齐。
2,比较对应维度上的数值,存在这三种情况则进行广播,输出的维度大小取数值最大值
(1),数值相等
(2),存在一个为1
(3),存在一个为空

三,例子

import numpy as np

arr = np.arange(24).reshape(3, 4, 2)
arr2 = np.arange(8).reshape(4, 2)
arr3 = arr+arr2
print(arr3.shape)  # (3, 4, 2)
"""
1,arr 与 arr2 右对齐
2,比较对应的数值,满足条件(1),(2)
arr  3 4 2
arr2   4 2
—————————————
arr3 3 4 2
"""
import numpy as np

arr = np.arange(24).reshape(3, 4, 2)
arr2 = np.arange(2).reshape(1, 1, 2)
arr3 = arr + arr2
print(arr3.shape)  # (3, 4, 2)
"""
1,arr 与 arr2 右对齐
2,比较对应的数值,满足条件(1),(3)
arr  3 4 2
arr2 1 1 2
—————————————
arr3 3 4 2
"""
import numpy as np

arr = np.arange(24).reshape(3, 4, 2)
arr2 = np.arange(2).reshape(1, 2)
arr3 = arr + arr2
print(arr3.shape)  # (3, 4, 2)
"""
1,arr 与 arr2 右对齐
2,比较对应的数值,满足条件(1),(2),(3)
arr  3 4 2
arr2   1 2
—————————————
arr3 3 4 2
"""
import numpy as np

arr = np.arange(24).reshape(3, 4, 2)
arr2 = np.arange(2).reshape(2)
arr3 = arr + arr2
print(arr3.shape)  # (3, 4, 2)
"""
1,arr 与 arr2 右对齐
2,比较对应的数值,满足条件(1),(3)
arr  3 4 2
arr2     2
—————————————
arr3 3 4 2
"""
import numpy as np

arr = np.arange(24).reshape(3, 4, 2)
arr2 = np.arange(4).reshape(1, 4)
arr3 = arr + arr2
print(arr3.shape)  # (3, 4, 2)
"""
1,arr 与 arr2 右对齐
2,比较对应的数值,不满足条件(1),报错
arr  3 4 2
arr2   1 4
—————————————
arr3 
"""

在这里插入图片描述

参考:
https://finthon.com/numpy-broadcast/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值